【纯 JS 问题】JSON 的 Key 用字符串和不用字符串有什么区别?
发布于 12 年前 作者 richarddong 15141 次浏览 最后一次编辑是 8 年前

比如在 console 里发现:

{a: '1'} == {'a': '1'}的值为false,这是为什么?

是因为是两个对象所以不相等么。。

5 回复

好吧。。。 {'a': '1'} == {'a': '1'}也是false。。。看来是这样。。。

你写的是2个对象,对象都是唯一独立的,任何2个对象都是不相等的 引用类型,js基础啊

另外, 不知楼主是混淆了还是问错了, 书写 JSON 与书写 JS 代码是不一样的. JSON 中字典 key 必须写作字符串形式, 并且须以双引号而非单引号引起. 如

JSON.parse('{ a: 1 }')
JSON.parse("{ 'a': 1 }")

都会出错.

而书写 JS 对象才能省去引号 (且仅当字符串内容为 JS 标识符或数值, bool 值时, 部分浏览器支持关键字直接作为 key) 或使用单引号替代双引号引起 key 的内容.

在 js 中,对象时引用类型,而引用类型比较相等的时候,比较的是内存地址,所以即使两个看起来一摸一样的对象,如果内存地址不相等的话,那么也是不等的。另外请参考三楼。

JSON数据本身就是字符串,经过JSON.parse才转化为javascript对象,你在console中输入的是对象,而不是JSON字符串。另外对象的key也可看作是字符串,例如一个对象{1:1},其中的属性名——1实际上是string类型,属性值——1则是number类型

回到顶部