JSON / Javascript对象文字语法

时间:2014-01-28 18:04:41

标签: javascript

以下哪个是首选的?

选项1

var object = {
    'propertyName':'propertyValue'
}

选项2

var object = {
    "propertyName":"propertyValue"
}

选项3

var object = {
    propertyName:'propertyValue'
}

我意识到选项2是真正的JSON语法。

4 个答案:

答案 0 :(得分:3)

它们在Javascript中都是等效的。

Javascript在编写字符串时不区分使用单引号和双引号。

指定对象文字的键时,如果它不是有效的标识符,或者它是保留的关键字,则需要引用它。否则,您可以使用引号将其写为字符串。

偏好是个人风格的问题。大多数程序都是使用最后一种语法编写的,但您偶尔会遇到问题。例如,Internet Explorer拒绝class: "value"作为语法错误,因为class是保留字,因此需要引用它。我在使用jQuery创建元素时经常会遇到这个问题,例如

$("<div>" {
    id: "foo",
    class: "fooClass"
});

会在IE中导致错误。

答案 1 :(得分:2)

这些都不是JSON。它们都是不同版本的JavaScript代码,它们使用JavaScript的文字语法进行对象创建。所有都完成相同(取决于您在属性名称中使用的字符或关键字),这取决于您选择的(尽管您应该保持一致)。

JSON是一种独立于平台的序列化方案,用于在平台/环境/进程之间传输数据。它的语法由JavaScript的文字语法的子集组成。 JSON始终是一个字符串。

在前者中,这是你的选择。在JSON中,规范非常明确,在编写JSON时将使用第二个示例中使用的样式(但是,第二个示例实际上并不是JSON)。序列化任何这些变量的JSON将在字符串中生成以下内容:

{"propertyName": "propertyValue"}

在任何支持JSON的平台上都是如此。

答案 2 :(得分:1)

如果在浏览器中运行JavaScript代码,则没有区别。

“首选”语法主要是一种观点,但我经常看到没有引号的属性名称。

使用引号确实允许您在JSON中定义对象时在属性名称中使用非字母数字字符:

var config = {
    "foo.url": "/foo",
    "foo.timeout": 3000,
    "foo^10": 100
};

config["foo.url"];

我以前在配置对象中使用过这个,我不想要深层嵌套的属性,但我确实想要一个sudo命名空间方案到属性名称。

答案 3 :(得分:1)

这些语法之间没有区别。如果你在javascript中使用它,你可以自由使用其中任何一个。

JSON与跨平台对象文字略有不同。程序员错误地不会创建错误的代码,这就是为什么它的语法严格使用“键的引号”。

所以没有引号

{ "i-name" : "Some value" }

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