素材牛VIP会员
由++[[]][+[]]+[+[]] = 10 ?引发的问题
 阁***起  分类:Node.js  人气:971  回帖:2  发布于6年前 收藏

这里附上关于此问题及其延伸的回答的总结,因内容较多,附上[链接](https://segmentfault.com/n/13...)

> [0][0] = '1'
'1'
> [0][0]
0
> [] = 1
TypeError: undefined is not a function
> [] = '1'
'1'

请给解释一下。

原文链接:为什么 ++[[]][+[]]+[+[]] = 10

谢谢各位

 标签:node.jsjavascript

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv2 入门
xi***iu JS工程师 6年前#1

[] = 1[] = '1'之间的区别,Ls已经说的很清楚了。
我就补充一句:当赋值运算符的左值是对象字面量或者数组字面量的时候,解释器就会进行解构赋值。

对于[0][0] = '1'[0][0],我以前对这篇文章写过另外一个回答,和你这个本质上是一回事儿:
js类型转换问题

Lv 牛魔王
素材牛 PHP开发工程师 6年前#2

[0]是一个带有0成员的数组,[0][0]是取它的第1个成员,所以必是0

用了[0][0] = '1'虽然改了第1成员的值,但下一个[0][0]是独立的取成员值的表达式,所以得到0数字值。

[] = 1是右值不是iterable(可迭代的)造成的错误,这应该是"解构赋值"造成的错误,以不同的浏览器调试:

// Chrome
TypeError: undefined is not a function

// Firefox
TypeError: 1 is not iterable

// Safari
TypeError: [] is not a function. (In '[]', '[]' is undefined)

数组解构赋值的话,右值必需是iterable(可迭代的),下面的例子的错误与[] = 1是一样错误,所以应该会先检查右值是否为iterable时,先抛出类型错误:

[] = {};
[] = undefined; 
[] = null; 

最后的,[] = '1'不会有错误,是因为字符串是属于iterable(可迭代的)。

解构赋值可以参考这篇文章。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取