表达式[][[]]
在JavaScript中评估为undefined
。我对此的理解是编译器看到第二组[...]
并将其解释为数组下标运算符(因为你不能将两个数组彼此相邻)。
因此编译器知道内部表达式[]
必须是索引,因此在评估它之后,它会将其强制转换为数字。 Number([])
评估为0
,因此我们[][0]
为undefined
。
但是,[1][[]]
并不像我期望的那样评估为1
,而是undefined
建议在这种情况下(或者也可能在前一种情况下),{{1} 不是被强制转换为数字。似乎我必须使用一元[]
强制类型强制:
+
所以如果表达式[1][+[]] // returns 1
中的内部[]
未被强制转换为数字,那么为什么该表达式会计算为[][[]]
?
答案 0 :(得分:0)
您正在尝试使用object.property.property获取数据,因此对象具有属性,是,但属性没有属性,因此它未定义。这样想;
let myArray = [1, 2, 3];
console.log(myArray['length']);
// -> 3
console.log(myArray['length']['length']);
// -> undefined
我觉得有问题, [] [ [] ] 这些括号不会影响代码。尝试用一些代码来结果;
let myArray = [[[1, 2, 3], 2, 3], 2, 3];
console.log(myArray[0][[0]]);
// -> [1, 2, 3]
console.log(myArray[0][0]);
// -> [1, 2, 3]
答案 1 :(得分:0)
错误的假设是,对索引求值的表达式被强制转换为数字。它实际上被强制为字符串,就像所有对象键一样。
因此,[1][[]]
变为[1][""]
,并且由于数组上不存在""
属性,因此我们得到undefined
而不是1
。