json/javaScript对象文字语法



以下和哪个首选是什么区别?

选项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" }

将完全错误,因为它中有连字符。

最新更新