Javascript JS中的对象文字表示法差异
JavaScript处理以下两个声明的方式有区别吗Javascript JS中的对象文字表示法差异,javascript,coding-style,Javascript,Coding Style,JavaScript处理以下两个声明的方式有区别吗 var foo = { foo : true, bar : 1 }; var foo2 = { "foo" : true, "bar" : 1 }; JavaScript似乎对它们一视同仁。如果它们真的是相同的,那么,有没有一种“正确”或首选的方式来声明这一点 您的第一个示例是而不是json { foo: true, bar: 1 } 因此,您的第二个代码()是json 关于你的实际问题,
var foo = {
foo : true,
bar : 1
};
var foo2 = {
"foo" : true,
"bar" : 1
};
JavaScript似乎对它们一视同仁。如果它们真的是相同的,那么,有没有一种“正确”或首选的方式来声明这一点 您的第一个示例是而不是json
{
foo: true,
bar: 1
}
因此,您的第二个代码()是json
关于你的实际问题,它们都是一样的
关于评论:
如果它们相同,但如果第一个示例不是json,而是 第二个是json,有什么区别 假设我有一个字符串,它应该(但不是)表示json字符串表示: 此字符串来自服务器:
" {foo: true,bar: 1}"
现在我想解析它
运行
JSON.parse(“{foo:true,bar:1}”)
将失败:
SyntaxError:意外标记f
然而:
JSON.parse(“{\'foo\':true,\'bar\':1}”)
就行了
Object{foo:true,bar:1}
这里有一个不同之处(一个不同的例子)
说到JS如何看待这两个对象(objects
!!!),我没有说json
因为第一个不是json)-它们是一样的
另外,另一个有用的特性是,即使您没有使用“myProp”
,也会将道具视为字符串:
例如:
var a={myProp:1}; //notice no `"`
var b="myProp";
a[b]=2;
alert(a.myProp) //2
任何一种形式都可以“初始化”对象(即声明对象文字)。
属性标识符可以是,但它们都被解释为字符串:
var foo={
傅:是的,
“酒吧”:没错,
3:对
};
更多细节
请注意,PropertyName构造在第5版中可能已经更改(正如许多事情一样),因此不支持最新版本JavaScript的浏览器可能会实现不同版本的ECMAScript
还请注意,和字符串用引号括起来:
var fooJSON='{“foo”:true,“bar”:true,“3”:true}';
错误。JSON是一个字符串。你所问的是“objectliteral”。如果它们是相同的,但如果第一个示例不是json,但第二个示例是json,那么区别是什么?这是它们的类型转换还是它们的解释方式?请注意,这也意味着对成为属性的对象调用.toString():var foo={};foo[{a:1}]='bar';foo[{}]/=>'bar';foo['[object]']/=>bar'
var a={myProp:1}; //notice no `"`
var b="myProp";
a[b]=2;
alert(a.myProp) //2