es6中扩展运算符( 三个点 )

图片描述

为什么我在chrome的控制台测试es6新的语法...+数组的时候,还要写上console.log,我现在不是在chrome的console里面了吗?

阅读 10.6k
6 个回答

...iterable 这种写法本身是没错啦,但是它展开之后相当于是逗号分隔的值列表,所以一般用在数组内或者函数调用的参数内。注意它不能展开当逗号运算符连续的多个值,所以不能直接用于表达式。

比如

a = [1,2,3]
b = [...a]   // [1, 2, 3]
c = [0, ...a]  // [0, 1, 2, 3]
d = [0, ...a, 9]  // [0, 1, 2, 3, 9]

function test(a, b, c) {
    console.log(a, b, c);
}

test(...a); // 1 2 3

语法错误啊。

... 是数组展开运算符。

你可以用在:

  1. 数组

    const a = [1, 2];
    const b = [a, 3];
  2. 函数

    const params = [1, 2];
    Math.max(...params);

console.log 就是第二种用法。

扩展语法允许一个表达式在期望多个参数(用于函数调用)或多个元素(用于数组字面量)或多个变量(用于解构赋值)的位置扩展。

重点是期望

所以 ...扩展。

有人把它称为三点运算符。其实,这个运算有两个含义,对应的英文是:rest 和 spread。他们也有区别:

...rest 必须是参数列表的最后一个参数!
...spread 无限制!

const [a, ...b] = [1, 2, 3]

这样的呀,兄弟

这种语法叫做扩展运算符,返回的是数组的iterator接口。
应该是console.log()语句才支持迭代iterator。

let a = [...[1,2,3]];
console.log(a);

console.log(...[1, 2, 3]) == console.log(1, 2, 3)

console.log 支持传多个参数,并顺序输出,所以成功了。

let a = ...[1, 2, 3] 等于什么呢? let a = 1, 2, 3 ??? 这样明显是不可以的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进