【问题标题】:Why does the following 3 line code return 1?为什么以下 3 行代码返回 1?
【发布时间】:2019-07-16 20:02:29
【问题描述】:

我正在阅读一本名为 Eloquent JavaScript 的关于 JavaScript 的书。以下是书中的一个sn-p:

"在 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”

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

    因为 arr 的第零个元素是 1

    即你可能打算这样做

    arr[len]

    长度本身为零,因此您确实在这样做 arr[0]

    长度是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)?

    【讨论】:

    • 是的,我一发布问题就想到它正在返回第 0 个索引值。但是为什么它会返回那个
    • “长度本身为零”——它是如何被初始化为 0 的?
    • 我确实解释了,因为长度(窗口上的 iframe 数量)为 0。
    • 你可能没有意识到当你输入length时它实际上是window.length的简写
    • 哦,是的。就读那个。不知道 iframe 的概念。谢谢托尼
    【解决方案2】:

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

    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

    【讨论】:

      【解决方案3】:

      你取length,它是Window的一个属性,并返回窗口的帧数。

      console.log(length); // 0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-09
        • 2019-06-23
        • 1970-01-01
        • 2017-05-07
        • 1970-01-01
        • 2019-11-29
        相关资源
        最近更新 更多