gpt4 book ai didi

javascript - 为什么在 javascript 中使用括号表示法时变量名不转换为字符串?

转载 作者:行者123 更新时间:2023-12-03 13:18:44 25 4
gpt4 key购买 nike

考虑:var foo = {"5": "ten", fighter : "Grohl"};

为什么会这样?

foo[5];
"ten"

foo[1 + 4];
"ten"

foo[fighter];
ReferenceError: fighter is not defined

当然,如果我以此开头:var fighter = 'fighter'; 然后我会按预期得到 Grohl

我的理解是,当使用方括号表示法时,方括号内的表达式会被求值并转换为字符串。因此,在 foo[5] 中,对 5 调用了 toString() 以将其计算为字符串,该字符串必须与括号符号一起使用。所以我的问题是:

为什么fighter 没有得到同样的享受?我知道 foo['fighter'] 有效,但知道不一定理解。我想了解这里发生了什么。

编辑:为什么我希望确实如此。如果 fighter 是一个包含另一个字符串的变量...比如“Dave”,那么 javascript 如何知道我是指对“Dave”的引用,还是我想将 fighter 转换为实际的字符串“fighter”。显然 javascript 无法读懂我的想法。感谢@DaveNewton 和@pointy 的照明。

最佳答案

因为这不是语言的基本语义所规定的。当您将 fighter 放在括号中时,您是在说“请计算此子表达式并将其值用作对象属性名称”。子表达式 fighter 是对符号的引用,而不是字符串常量。

如果你想使用标识符的名称作为文字属性名称,请使用 . 运算符:

foo.fighter

在您的其他示例中,发生了同样的事情。子表达式 51+4 的计算方式与它们在其他地方的计算方式完全相同。也就是说,考虑:

var x = 1 + 4;

您期望“x”是什么?好的,那么:

var x = fighter;

显然期望“x”是字符串“fighter”是非常奇怪的;如果语言这样做,您将如何引用变量?

关于javascript - 为什么在 javascript 中使用括号表示法时变量名不转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com