JS spread syntax

JS里的展开符号

 var arr = [1, 8, 3, 15, 4, 5]; //声明数组表达式

var max = Math.max.call(Math, ...arr); // ES6解构语法======(这里有疑问看正文后再回来消化下)

arr是一个数组, ...arr 可以放到参数的位置,就成了 arr[0], arr[1], arr[2] ...

JS有两个运行空间, WINDOW 或者 node,
node下是global, window下是 window

在window(至少)下, 直接console.log(Math), 就显示Math就是一个对象, 还能console.log(Math.tostring()), 如果console.log(Matha)就不行了。

扩展运算符分为两种。一种是用在函数参数、数组展开的场合,这种情况要求对象是可迭代的(iterable)

另一种是用于对象展开,也就是 {…obj} 形式,这种情况需要对象是可枚举的(enumerable)

结论:

之所以以下代码可行,是因为数组对象是可枚举的:

let obj = {...arr};

而以下代码不可行,是因为普通对象默认是不可迭代的:

let arr = [...obj]; // not work


http://www.fly63.com/article/detial/2516
这个文章说的很好

你可能感兴趣的:(JS spread syntax)