Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带/不带引号的Javascript对象属性_Javascript - Fatal编程技术网

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

带/不带引号的Javascript对象属性,javascript,Javascript,我是一名JavaScript学习者,想知道两者之间的区别 var obj1={ 属性1:1 }; 变量obj2={ “属性1”:1 }; console.log(obj1.attribute1); console.log(obj2.attribute1)没有区别 对象文字语法允许您使用字符串或标识符来提供属性名称 字符串允许您使用标识符中不允许的字符(如或),但属性1中没有这些字符。它们在您的情况下是等效的 在内部,它们是相同的 可能发生的变化是您可以使用代码访问它们的方式 在使用字符串(带引

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

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对象不同。为了简化这个答案:带引号的属性和括号表示法始终有效,不带引号的属性和
点访问是你的财产名称是一个有效的标识符。谢谢,我遗漏了“标识符”一词。我冒昧地引用了你的摘要。