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

时间:2018-10-02 10:40:16

标签: javascript

我是一名JavaScript学习者,想知道

有什么区别

    var obj1 = {
        attribute1 : 1
    };
    
    var obj2 = {
        "attribute1" : 1
    };
    
    console.log(obj1.attribute1);
    console.log(obj2.attribute1);

它们都打印1.它们之间有主要区别吗?

3 个答案:

答案 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);