发布于 

扩展运算符(...)

扩展运算符(spread):是三个点(…)。主要用于函数调用/数组构造是,将数组表达式或者string在语法层面展开,但值得注意的是如果扩展运算符后面是一个空数组,则不产生任何效果,而且只有函数调用时,扩展运算符才可以放在圆括号中,否则会报Uncaught SyntaxError: Unexpected number

语法:

函数调用

1
myFunction(...iterableObj);

数组结构或字符串

1
[...iterableObj, '4', ...'hello', 6];

进行克隆或者属性拷贝(原数组不受影响)

1
2
3
4
5
var arr = [1, 2, 3];
var arr2 = [...arr]; // like arr.slice()
arr2.push(4);
// arr2 此时变成 [1, 2, 3, 4]
// arr 不受影响let objClone = { ...obj };

放置表达式?

1
2
3
4
const arr = [
...(x > 0 ? ['a'] : []),
'b',
];

扩展:

扩展运算符等价与apply的方式

1
2
3
function myFunction(x, y, z) { }
var args = [0, 1, 2];
myFunction.apply(null, args);

PS:使用new关键字调用构造函数时,不能直接使用数组+apply的方式(apply 执行的是调用 [[Call]] , 而不是构造 [[Construct]]


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。