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

tin*_*nit 2 javascript

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

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

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

arr = [1,2,3];
len = "length";
console.log(arr[len]);
Run Code Online (Sandbox Code Playgroud)

//输出为预期的“ 3”

arr = [1,2,3];
console.log(arr.length);
Run Code Online (Sandbox Code Playgroud)

//预期输出为“ 3”

arr = [1,2,3];
len = "length";
console.log(arr[length]);
Run Code Online (Sandbox Code Playgroud)

//输出为“ 1”

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

ton*_*ony 5

因为arr的第零个元素是1

也就是说,您可能打算这样做

arr [len]

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

长度是window.length,此链接说明

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

(稍后添加)

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

window.variableName

Javascript中的变量声明语法(包括全局变量)之间的区别?