我正在读一本关于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”。
答案 0 :(得分:5)
因为arr的第零个元素是1
即你可能打算这样做
arr [len]
长度本身为零,因此您实际上是在执行此arr [0]
length是window.length,此链接对此进行了解释
https://www.w3schools.com/jsref/prop_win_length.asp
(稍后添加)
混乱的程度似乎与window.length相同。 下面的链接可能有助于理解这一点,尽管如果您是初学者,我可能会接受它并稍后再返回
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)