带/不带引号的Javascript对象属性
我是一名JavaScript学习者,想知道两者之间的区别带/不带引号的Javascript对象属性,javascript,Javascript,我是一名JavaScript学习者,想知道两者之间的区别 var obj1={ 属性1:1 }; 变量obj2={ “属性1”:1 }; console.log(obj1.attribute1); console.log(obj2.attribute1)没有区别 对象文字语法允许您使用字符串或标识符来提供属性名称 字符串允许您使用标识符中不允许的字符(如或),但属性1中没有这些字符。它们在您的情况下是等效的 在内部,它们是相同的 可能发生的变化是您可以使用代码访问它们的方式 在使用字符串(带引
var obj1={
属性1:1
};
变量obj2={
“属性1”:1
};
console.log(obj1.attribute1);
console.log(obj2.attribute1)代码>没有区别
对象文字语法允许您使用字符串或标识符来提供属性名称
字符串允许您使用标识符中不允许的字符(如
或
),但属性1
中没有这些字符。它们在您的情况下是等效的
在内部,它们是相同的
可能发生的变化是您可以使用代码访问它们的方式
在使用字符串(带引号的属性)时,您实际上可以为属性使用更奇特的名称:
var obj3 = {
"attribute with space": 1,
"123AttributeStartingWithANumber": 1,
}
在我的示例中,无法通过obj1.attributeName
语法访问这些属性名称(但可以使用括号表示:obj1[“带空格的属性”]
或obj1[“123AttributeStartingWithANumber”]
)
这是因为“带空格的属性”或“123Attribute”在JS中不是有效的标识符
请注意,在您的示例中,您还可以使用括号表示法:
console.log(obj1["attribute1"]);
console.log(obj2["attribute1"]);
总之,引用以下评论:
带引号的属性和括号表示法始终有效,不带引号
属性和
点访问是属性名称的缩写
是有效的标识符
如果将对象键声明为字符串,则可以创建其中包含空格的对象键:
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);
第二个版本更倾向于json期望属性标签的设置方式,根据您当前的示例,没有太大的差异,可以将对象文本编码为第一个版本。我不认为有什么区别。只有两种不同的编码样式。这与样式或json无关……引号通常是可选的,但是有时是必需的,这取决于您的键的名称。JSON将其标准化,使其始终是必需的。JSON是关于序列化的,不要忘记它与JavaScript对象不同。为了简化这个答案:带引号的属性和括号表示法始终有效,不带引号的属性和
点访问是你的财产名称是一个有效的标识符。谢谢,我遗漏了“标识符”一词。我冒昧地引用了你的摘要。