【问题标题】:JSON.stringify() and JavaScript ObjectsJSON.stringify() 和 JavaScript 对象
【发布时间】:2011-08-26 15:26:00
【问题描述】:

我在想也许我错过了一些我现在正在学习的 JavaScript 内容。

我在 Chrome 控制台中尝试了这段代码:

a = [];
a.name = "test";
JSON.stringify(a); 
// which returns value []
a = new Object();
a.name = "test";
JSON.stringify(a); 
// which returns value {"name":"test"}

有什么区别? 我认为 new Object() 是 Microsoft JScript 的东西?我错过了什么? 一定在某个地方的规范中遗漏了一些东西。谢谢。

【问题讨论】:

  • “我认为 new Object() 是 Microsoft JScript 的东西?” 不,一点也不。那是标准的 JavaScript(虽然它很冗长,但只需使用 {} 代替——它在 JScript 和其他 ECMAScript 实现中都可以正常工作)。

标签: javascript ajax json stringify


【解决方案1】:
a = new Object()

a = []

不等价。但是,

a = {}

a = new Object()

是。

【讨论】:

  • 好的。谢谢。感觉我现在得到了每日奖励的愚蠢问题。
【解决方案2】:

new Object() 等价于 {}(除非不是因为奇怪的重新定义问题 - 但暂时忽略它。)[] 等价于 new Array(),然后您将添加一个 @987654325 @ 财产。 JSON 以一种特殊的方式对数组进行字符串化,不会捕获对数组本身的任意属性分配。

【讨论】:

    【解决方案3】:

    对于 JSON 数据,数组具有数字索引,对象具有键/值对。

    a = [];
    a[ 0 ] = "test";
    
    JSON.stringify(a); // returns value ["test"]
    

    【讨论】:

      【解决方案4】:

      是的,您正在使用 [] 定义您的对象,该对象实际上是一个数组,但根据您所来自的语言可能会令人困惑,因为它不是关联数组。

      默认对象都是key->data的映射,用大括号{}实例化

      如果你这样做了

      a = {};
      a.name = "test";
      JSON.stringify(a); 
      

      它应该可以工作。

      【讨论】:

      • "... 可能会令人困惑,因为它不是关联数组" 实际上,它比这更令人困惑,因为它 关联数组数组和非数字键(属性名)在 JavaScript 中完全有效,因为 arrays aren't really arrays。但是如果将数组转换为 JSON,它们会被丢弃,因为 JSON 数组表示法不允许非数字键(有充分的理由,很少有语言会支持它们)。
      【解决方案5】:

      设置数组的name 属性对其序列化(JSON 字符串化)形式没有任何作用。它不会将条目放入数组中。为此,您需要a.push('test')

      对象是 Javascript 的标准部分(例如,参见MDC docs)。创建对象的常规方法是使用{},但new Object() 也可以。

      所以...

      var a = [];
      a.push('test');
      JSON.stringify(a); //"["test"]"
      
      a = {};
      a.name = 'test';
      JSON.stringify(a); //"{"name":"test"}"
      

      【讨论】:

        猜你喜欢
        • 2013-04-16
        • 2014-09-21
        • 2012-12-01
        • 2013-11-07
        • 2015-08-15
        • 2017-04-02
        • 2019-08-23
        • 2017-12-30
        • 1970-01-01
        相关资源
        最近更新 更多