使用以var,dot和括号表示法存储的属性名称

时间:2014-11-17 18:33:18

标签: javascript variables properties notation

我正在使用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);

但为什么呢? 谢谢你们。

2 个答案:

答案 0 :(得分:0)

通过使用点符号,您向解释器指示您知道汽车的属性命名为" sts"。它没有尝试解决它。如果你有一个对象

var car = {
seats: "cloth",
sts : "foo",
engine: "V-6"
};

您的点符号代码可以使用,但返回字符串" foo"。

或者,通过使用括号表示法,解释器需要一个字符串,因此它接收的任何变量都将被解析为字符串。既然你知道这一点,请考虑这一点。您如何期望这些调用中的任何一个都表现出来?

car."sts"
car["sts"]

第一个调用错误输出,第二个调用返回" foo"。希望这说明了这两种变量引用方法之间的差异。

答案 1 :(得分:0)

点符号是首选,并且JS警告使用括号表示法。

支架表示法的使用应保留用于动态属性名称,就像在(第二个)示例中一样。

回答你的问题:

car.stscar["sts"]

相同

所以

car[sts]cat.<the value of sts>相同:

var sts = "seats";
car[sts]; // equal to car.seats

使用点符号时,属性名称必须为 valid identifier ,而使用括号符号时,属性名称必须为任何字符串,甚至是空字符串'';