以下哪个是首选的?
选项1
var object = {
'propertyName':'propertyValue'
}
选项2
var object = {
"propertyName":"propertyValue"
}
选项3
var object = {
propertyName:'propertyValue'
}
我意识到选项2是真正的JSON语法。
答案 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" }
将完全错误,因为它有连字符。