为什么 [][[]] 评估为未定义?
Why does [][[]] evaluate to undefined?
表达式 [][[]]
在 JavaScript 中的计算结果为 undefined
。我对此的理解是,编译器看到第二组 [...]
并将其解释为数组下标运算符(因为你不能让两个数组彼此相邻)。
因此编译器知道内部表达式 []
必须是一个索引,因此在对其求值后,将其强制转换为一个数字。 Number([])
的计算结果为 0
,因此我们有 [][0]
,即 undefined
。
然而,[1][[]]
并没有像我预期的那样评估为 1
,而是评估为 undefined
,这表明在这种情况下(或者可能在之前的情况下),[]
不是 被强制转换成一个数字。看来我必须使用一元 +
来强制类型转换:
[1][+[]] // returns 1
所以 如果 表达式 [][[]]
中的内部 []
没有被强制转换为数字,那么为什么该表达式的计算结果为 undefined
?
您正在尝试使用 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]
错误的假设是计算结果为索引的表达式被强制转换为数字。它实际上像所有对象键一样被强制转换为字符串(除了 Symbols,它仍然是 Symbols)。
因此,[1][[]]
变为 [1][""]
,并且由于数组中不存在 ""
属性,我们得到 undefined
而不是1
.
表达式 [][[]]
在 JavaScript 中的计算结果为 undefined
。我对此的理解是,编译器看到第二组 [...]
并将其解释为数组下标运算符(因为你不能让两个数组彼此相邻)。
因此编译器知道内部表达式 []
必须是一个索引,因此在对其求值后,将其强制转换为一个数字。 Number([])
的计算结果为 0
,因此我们有 [][0]
,即 undefined
。
然而,[1][[]]
并没有像我预期的那样评估为 1
,而是评估为 undefined
,这表明在这种情况下(或者可能在之前的情况下),[]
不是 被强制转换成一个数字。看来我必须使用一元 +
来强制类型转换:
[1][+[]] // returns 1
所以 如果 表达式 [][[]]
中的内部 []
没有被强制转换为数字,那么为什么该表达式的计算结果为 undefined
?
您正在尝试使用 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]
错误的假设是计算结果为索引的表达式被强制转换为数字。它实际上像所有对象键一样被强制转换为字符串(除了 Symbols,它仍然是 Symbols)。
因此,[1][[]]
变为 [1][""]
,并且由于数组中不存在 ""
属性,我们得到 undefined
而不是1
.