关键词不能为空

位置:齐齐哈尔诗词网 > 佳句赏析 > 为什么「].concat[1,2,3」酱紫也行?

为什么「].concat[1,2,3」酱紫也行?

作者:齐齐哈尔诗词网
日期:2020-03-12 18:27:22
阅读:

译者:为什么「].concat[1,2,3」酱紫也行?

明明如月

审校:为什么「].concat[1,2,3」酱紫也行?

蓝色漂流瓶

今天介绍一个很有意思的点。可能大家平时没有注意。

主要涉及 逗号操作符和concat函数

(谢绝喷子,在这里讲这个并不是因为我们应该多研究这种偏的内容,而是有意思介绍一下。)

为什么「].concat[1,2,3」酱紫也行?

想获得下面的结果你需要怎样做?为啥酱紫做也能行呢?

> [].concat[1,2,3]

[ 1, 2, 3 ]

谜底在后面揭晓:

这个表达式非常像:

[].concat([1,2,3])

但实际上他们的含义完全不同:

  • 1 首先 [].concat 的结果是通过计算得来的. 结果是存储在Array.prototype.concat .的方法。

  • 2 然后方括号操作符的操作数进行包裹。它包含了三个数中间的逗号操作符(在此处逗号相当于+ )。如下:


> 1,2,3

3

  • 3 最后通过[].concat返回的 '3' 被存储起来。

一般说来开始的那个操作将产生undefined :

> [].concat[1,2,3]

undefined


然而如果你按照下面这样写,你就可以得到开始时给出的结果:

> Array.prototype.concat[3] = [1,2,3];

> [].concat[1,2,3]

[ 1, 2, 3 ]

【译者注释】

这里其实就是 将数组原型的concat[3] 赋值为数组[1,2,3]

然后 下一行:[].concat[1,2,3]

相当于:[].concat[3]

也就是:Array.prototype.concat[3]

所以打印出 [1,2,3]就非常好理解了

为什么「].concat[1,2,3」酱紫也行?运行结果:

为什么「].concat[1,2,3」酱紫也行?

【译者拓展】

对号操作符:表达式1,表达式2,表达式3,..,表达式n

逗号操作符,执行所有操作,但是返回最后侧那个表达式的值。

也就是说 表达式1,到表达式n都会被依次执行,但是返回的是 最后一个表达式n的值。

如:

> var x = 0;

> var y = (x++, 10);

> x

1

> y

10

可以参考:http://speakingjs.com/es5/ch09.html#comma_operator

本文英文源:http://www.2ality.com/2016/11/concat-array-literal.html

相关推荐

  • 为什么「].concat[1,2,3」酱紫也行?

    明明如月,译者:明明如月审校:蓝色漂流瓶今天介绍一个很有意思的点。可能大家平时没有注意。主要涉及 逗号操作符和concat函数(谢绝喷子,在这里讲这个并不是因为我们应该多研究这种偏的内容,而是有意思介绍一下。)想获得下面的结果你需要怎样做?为啥酱紫做也能行呢?> [].

    佳句赏析