表达方式[][[]]
评估为undefined
在 JavaScript 中。我对此的理解是编译器看到第二组[...]
并将其解释为数组下标运算符(因为不能让两个数组彼此相邻)。
所以编译器知道内部表达式,[]
,必须是一个索引,因此在评估它之后,它会将其强制为一个数字。Number([])
评估为0
,所以我们有[][0]
,即undefined
.
然而,[1][[]]
不评估为1
正如我所期望的,而是undefined
建议在这种情况下(或者也可能在前一种情况下),[]
isn't被强制给一个数字。看来我必须使用一元+
强制类型强制:
[1][+[]] // returns 1
So if内在的[]
在表达式中[][[]]
没有被强制转换为数字,那么为什么该表达式的计算结果为undefined
?
错误的假设是计算索引值的表达式被强制转换为数字。事实上,它和所有对象键一样被强制转换为字符串(符号除外,它仍然是符号)。
Thus, [1][[]]
变成[1][""]
,并且自从""
数组中不存在属性,我们得到undefined
代替1
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)