我是一名JavaScript学习者,想知道
有什么区别
var obj1 = {
attribute1 : 1
};
var obj2 = {
"attribute1" : 1
};
console.log(obj1.attribute1);
console.log(obj2.attribute1);
它们都打印1.它们之间有主要区别吗?
答案 0 :(得分:1)
没有区别。
对象文字语法允许您使用字符串或标识符来提供属性名称。
字符串允许您使用标识符中不允许使用的字符(例如或
.
),但是attribute1
中没有这些字符。
答案 1 :(得分:1)
在您的情况下,它们是等效的。
在内部,它们是相同的。
可能所能改变的是您使用代码访问它们的方式。
使用字符串(带引号的属性)时,实际上可以为属性使用更多的外来名称:
var obj3 = {
"attribute with space": 1,
"123AttributeStartingWithANumber": 1,
}
在我的示例中,您无法通过obj1.attributeName
语法访问那些属性名称(但可以使用方括号表示法:obj1["attribute with space"]
或obj1["123AttributeStartingWithANumber"]
。
这是因为在JS中“带空格的属性”或“ 123Attribute”不是有效的标识符。
请注意,在您的示例中,您还可以使用方括号表示法:
console.log(obj1["attribute1"]);
console.log(obj2["attribute1"]);
总而言之,引用deceze's评论:
带引号的属性和方括号表示法始终有效,不带引号 属性和
.
点访问是您的属性名称时的简写 是有效的标识符。
答案 2 :(得分:1)
如果将对象键声明为字符串,则可以使它们之间带有空格:
var obj1 = {
attribute1 : 1 // but you cannot say my attribute1: 1 it will throw syntax error
};
var obj2 = {
"my attribute1" : 1
};
console.log(obj1.attribute1);
console.log(obj2.attribute1);