为什么以下3行代码返回1?

时间:2019-07-16 11:50:38

标签: javascript

我正在读一本关于JavaScript的书,名为Eloquent JavaScript。以下是该书的摘录:

“访问JavaScript中属性的两种主要方法是使用点和 方括号。 value.x和value [x]都访问value的属性,但是 不一定是相同的属性。区别在于x的解释方式。 使用点时,点后的单词是属性的文字名称。 使用方括号时,括号之间的表达式计算为 获取属性名称。而value.x获取名为value的属性 “ x”,value [x]尝试计算表达式x并使用转换后的结果 字符串,作为属性名称。”

在处理这些信息时,我碰巧尝试了这段代码。它返回数组第一个索引处的值。为什么这样?

arr = [1,2,3];
len = "length";
console.log(arr[len]);

//预期输出为“ 3”

arr = [1,2,3];
console.log(arr.length);

//预期输出为“ 3”

arr = [1,2,3];
len = "length";
console.log(arr[length]);

//输出为“ 1”

///因为JS是一种灵活的语言,所以我期望的输出是错误或至少为值“ 3”。

3 个答案:

答案 0 :(得分:5)

因为arr的第零个元素是1

即你可能打算这样做

arr [len]

长度本身为零,因此您实际上是在执行此arr [0]

length是window.length,此链接对此进行了解释

https://www.w3schools.com/jsref/prop_win_length.asp

(稍后添加)

混乱的程度似乎与window.length相同。 下面的链接可能有助于理解这一点,尽管如果您是初学者,我可能会接受它并稍后再返回

window.variableName

Difference between variable declaration syntaxes in Javascript (including global variables)?

答案 1 :(得分:3)

不能将变量名用作字符串。

length的值为0(因为它与window.length,实际上是represents the number of frames in the current document相同),因此您看到的是数组的第一个元素:

let arr = [ 1, 2, 3 ];
console.log( length );      // 0
console.log( arr[length] ); // 1

答案 2 :(得分:2)

您使用length,它是Window的属性,并返回窗口的帧数。

console.log(length); // 0