//数组字面量扩展 let test = [3,4,5], copyTest = [...test], // copyTest [3,4,5] extTest = [1,2,...test]; //extTest [1,2,3,4,5] //对象字面量扩展 let obj = {a: 1, b: 2}, copyObj = {...obj}, // extObj = {...obj, c: 3};
函数调用 作为实参
function myFunction(x, y, z) { return x+y+z; } var args = [0, 1, 2]; myFunction(...args); //3
替代apply方法的参数使用数组的形式
Array.prototype.push.apply(arr) //=>// Array.prototype.push(...arr)
合并数组、对象
let array1 = [1,2,3], array2 = [4,5,6],array3 = [...array1, ...array2];
rest剩余参数(rest parameter)
剩余参数(rest parameter)语法允许我们将一个不定数量的参数表示为一个数组,
function sortRestArgs(...theArgs) { var sortedArgs = theArgs.sort(); return sortedArgs; } alert(sortRestArgs(5,3,7,1)); // 弹出 1,3,5,7
听起来感觉和arguments他有点相似:
剩余参数只包含那些没有对应形参的实参,而 arguments 对象包含了传给函数的所有实参。
arguments 对象不是一个真实的数组,而剩余参数是真实的 Array实例,也就是说你能够在它上面直接使用所有的数组方法,比如 sort,map,forEach,pop。
arguments 对象对象还有一些附加的属性 (比如callee属性)。
还可以和结构赋值一起使用
var [a, ...rest] = [1, 2, 3, 4]; console.log(a);//1 console.log(rest);//[2, 3, 4]
扩展运算和rest参数注意
对于三个点号...,三点放在形参或者等号左边为rest运算符; 放在实参或者等号右边为spread运算符,或者说,放在被赋值一方为rest运算符,放在赋值一方为扩展运算符。
注意
在等号赋值或for循环中,如果需要从数组或对象中取值,尽量使用解构。
在自己定义函数的时候,如果调用者传来的是数组或对象,形参尽量使用解构方式,优先使用对象解构,其次是数组解构。代码可读性会很好。
在调用第三方函数的时候,如果该函数接受多个参数,并且你要传入的实参为数组,则使用扩展运算符。可以避免使用下标形式传入参数。也可以避免很多人习惯的使用apply方法传入数组。
rest运算符使用场景应该稍少一些,主要是处理不定数量参数,可以避免arguments对象的使用。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章: