我对JS中的括号和点表示法提出了挑战,我或多或少地理解了它的工作原理,但我不能用一点来说明:
为什么不能使用属性名存储在变量中的Dot表示法?
这一点尚不明确:
var car = {
seats: "cloth",
engine: "V-6"
};
var s = "seats";
function show_seat_type(sts) {
window.alert(car.sts); // undefined
}
show_seat_type(s);这样就好了
var car = {
seats: "cloth",
engine: "V-6"
};
var s = "seats";
function show_seat_type(sts) {
window.alert(car[sts]); // works
}
show_seat_type(s);但是为什么呢?谢谢你们。
发布于 2014-11-17 18:46:10
通过使用点表示法,您可以向解释器指示您知道的car有一个名为"sts“的属性。它并没有试图解决这个问题。如果你有一个对象
var car = {
seats: "cloth",
sts : "foo",
engine: "V-6"
};您的点符号代码可以工作,但返回字符串"foo“。
或者,通过使用括号内的表示法,解释器需要一个字符串,因此它接收到的任何变量都将解析为字符串。既然你知道了,就考虑这个吧。你希望这些电话中的任何一个都能表现出来吗?
car."sts"
car["sts"]第一个调用错误退出,第二个错误返回"foo“。希望这说明了这两种变量引用方法之间的区别。
发布于 2014-11-17 19:49:19
点表示法是首选,JS指针警告使用括号表示法。
括号符号的使用应该保留给动态属性名称,就像在(第二个)示例中一样。
回答你的问题:
car.sts与car["sts"]相同
所以
car[sts]与cat.<the value of sts>相同
var sts = "seats";
car[sts]; // equal to car.seats使用点表示法,属性名必须是有效标识符,而对于brack表示法,它可以是任何字符串,甚至是空字符串'';
https://stackoverflow.com/questions/26979466
复制相似问题