以下和哪个首选是什么区别?
选项1
var object = {
'propertyName':'propertyValue'
}
选项2
var object = {
"propertyName":"propertyValue"
}
选项3
var object = {
propertyName:'propertyValue'
}
我意识到选项2是真正的JSON语法。
它们在JavaScript中都等效。
javascript在编写字符串时使用单引号和双引号没有区别。
指定对象文字的键时,如果它不是有效的标识符,或者是保留的关键字,则需要引用它。否则,您可以使用任何引号。
将其写成字符串。偏好是一个个人风格问题。大多数程序都是使用最后一个语法编写的,但是您有时会遇到问题。例如,Internet Explorer拒绝class: "value"
作为语法错误,因为class
是保留的单词,因此需要引用它。当使用jQuery创建元素时,我经常遇到这个问题,例如
$("<div>" {
id: "foo",
class: "fooClass"
});
将在IE中导致错误。
这些都不是JSON。它们都是JavaScript代码的各种版本,它使用JavaScript的文字语法进行对象创建。所有人都可以完成相同的操作(取决于您在属性名称中使用的字符或关键字),这取决于您选择(尽管您应该保持一致)。
JSON是一种平台独立的序列化方案,用于在平台/环境/过程之间传输数据。它的语法由JavaScript的字面语法组成。json始终是字符串。
在前者中,这是您的选择。在JSON中,规格非常清楚,在编写JSON时将使用第二个示例中使用的样式(尽管另一种情况,您的第二个示例实际上不是JSON)。JSON序列化这些变量中的任何一个都会在字符串中产生以下内容:
{"propertyName": "propertyValue"}
在任何支持JSON的平台上都是如此。
如果JavaScript代码在浏览器中运行,则没有区别。
"首选"语法在很大程度上是一种意见,但我看到没有引号的属性名称。
使用引号允许您在json中定义对象时使用属性名称中的非alpha数字字符:
var config = {
"foo.url": "/foo",
"foo.timeout": 3000,
"foo^10": 100
};
config["foo.url"];
我之前曾在我不想深嵌套属性的配置对象中使用过此
,但是我确实想要sudo namespacing方案对属性名称。
这些语法中的任何一个都没有区别。如果您在JavaScript中使用此此功能,则可以自由使用其中的任何一个。
JSON有点不同,它的跨平台对象字面意义。程序员错误地不会创建Errorfull代码,这就是为什么它的语法使其严格使用"键的报价"。
所以没有报价
{ "i-name" : "Some value" }
将完全错误,因为它中有连字符。