带/不带引号的 Javascript 对象属性

I.K*_*.K. 6 javascript

我是一名 JavaScript 学习者,想知道两者之间有什么区别

    var obj1 = {
        attribute1 : 1
    };
    
    var obj2 = {
        "attribute1" : 1
    };
    
    console.log(obj1.attribute1);
    console.log(obj2.attribute1);
Run Code Online (Sandbox Code Playgroud)

两者都打印1。它们之间有很大的区别吗?

Pac*_*ac0 5

它们在您的情况下是等效的。

在内部,它们是相同的。

可能改变的是您使用代码访问它们的方式。

当使用字符串(带引号的属性)时,您实际上可以为属性使用更奇特的名称:

var obj3 = {
    "attribute with space": 1,
    "123AttributeStartingWithANumber": 1,
}
Run Code Online (Sandbox Code Playgroud)

在我的示例中,您无法通过语法访问这些属性名称obj1.attributeName(但您可以使用方括号符号 :obj1["attribute with space"]或obj1["123AttributeStartingWithANumber"].

这是因为“带空格的属性”或“123Attribute”在 JS 中不是有效的标识符。

请注意,在您的示例中,您还可以使用括号表示法:

console.log(obj1["attribute1"]);
console.log(obj2["attribute1"]);
Run Code Online (Sandbox Code Playgroud)

总之,引用deceze 的评论:

带引号的属性和括号表示法始终有效,不带引号的属性和.点访问是当属性名称是有效标识符时的简写。