我正在使用JS中的括号和点符号挑战,我理解(或多或少)它是如何工作的,但我不能说一点:
为什么我不能使用Dot Notation,因为属性名称存储在变量中?
这是未定义的:
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);
但为什么呢? 谢谢你们。
答案 0 :(得分:0)
通过使用点符号,您向解释器指示您知道汽车的属性命名为" sts"。它没有尝试解决它。如果你有一个对象
var car = {
seats: "cloth",
sts : "foo",
engine: "V-6"
};
您的点符号代码可以使用,但返回字符串" foo"。
或者,通过使用括号表示法,解释器需要一个字符串,因此它接收的任何变量都将被解析为字符串。既然你知道这一点,请考虑这一点。您如何期望这些调用中的任何一个都表现出来?
car."sts"
car["sts"]
第一个调用错误输出,第二个调用返回" foo"。希望这说明了这两种变量引用方法之间的差异。
答案 1 :(得分:0)
点符号是首选,并且JS警告使用括号表示法。
支架表示法的使用应保留用于动态属性名称,就像在(第二个)示例中一样。
回答你的问题:
car.sts
与car["sts"]
所以
car[sts]
与cat.<the value of sts>
相同:
var sts = "seats";
car[sts]; // equal to car.seats
使用点符号时,属性名称必须为 valid identifier ,而使用括号符号时,属性名称必须为任何字符串,甚至是空字符串''
;