ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] >[success] # 扩展运算符 ~~~ '不定参数'和'扩展运算符'很相似,前者是把'参数合并成一个数组',后者是把'数组打散成各自独立' ~~~ 如下我有想通过`Math`的`max`方法过滤出参数最大的那个值 ~~~ let value1 = 25, value2 = 50 console.log(Math.max(value1, value2)) // 50 ~~~ 现在有一个需求,想通过一个数组,过滤出数组中最大的那个值,但是`max`方法的参数不支持传入数组,该怎么办 >[success] ## ES5将数组打散 ~~~ 'ES5'通过使用'apply'方法来将'数组打散','apply'方法第一个参数为调用的那个方法的'this', 'apply'方法的第二个参数为'数组',例子如下: ~~~ ~~~ let arr = [25, 50, 75, 100] console.log(Math.max.apply(Math, arr)) // 100 ~~~ <br/> >[success] ## ES6将数组打散 1. 扩展运算符基础功能 ~~~ let arr = [25, 50, 75, 100] console.log(Math.max(...arr)) // 100 ~~~ ~~~ 如果数组是'负数'的情况下,可以为'max'方法设置一个'最小值0'(防止负数偷偷返回) ~~~ ~~~ let arr = [-25, -50, -75, -100] console.log(Math.max(...arr, 0)) // 0 ~~~ 2. 浅拷贝数组 ~~~ 2.1 '传统方式': // 数组1 let arr = [1, 2, 3, 4, 5, 6] // 数组2 let arr2 = []; // 浅拷贝数组 arr.forEach(i => arr2.push(i)) // 修改数组1 arr[0] = 222 console.log(arr, 'arr') // [ 222, 2, 3, 4, 5, 6 ] console.log(arr2, 'arr2') // [ 1, 2, 3, 4, 5, 6 ] 2.2 'ES6扩展运算符方式': // 数组1 let arr = [1, 2, 3, 4, 5, 6] // 数组2 let arr2 = [...arr]; // 修改数组1 arr[0] = 222 console.log(arr, 'arr') // [ 222, 2, 3, 4, 5, 6 ] console.log(arr2, 'arr2') // [ 1, 2, 3, 4, 5, 6 ] ~~~ 3. 浅拷贝对象 ~~~ 3.1 '传统方式': // 对象1 let obj = { a: '小明', b: false } // 对象2 let obj2 = {} // 浅拷贝 for (key in obj) { obj2[key] = obj[key] } // 修改对象1 obj['b'] = true console.log(obj) console.log(obj2) 3.2 'ES6扩展运算符方式': // 对象1 let obj = { a: '小明', b: false } // 对象2 let obj2 = { ...obj } // 修改对象1 obj['b'] = true console.log(obj) console.log(obj2) ~~~