Roc*_*uts 4 javascript arrays json object stringify
在JavaScript中,您可以拥有对象,如下所示:
var a = { foo: 12, bar: 34 };
Run Code Online (Sandbox Code Playgroud)
或者带有键(命名)索引的数组,如下所示:
var b = [];
b['foo'] = 56;
b['bar'] = 78;
Run Code Online (Sandbox Code Playgroud)
它们有点类似,但显然不一样.
现在奇怪的是,JSON.stringify似乎没有接受数组.没有错误或任何东西,JSON.stringify(b)只会产生[].
看到这个jsfiddle示例.我做错了什么,或者我只是误解了数组是如何工作的?
Javascript不支持关联数组(如PHP).
var b = []; 当您尝试创建Object时,显式声明一个数组.
Javascript中的数组只能包含数组的索引方法,而对象则更多是关联数组.
如果更改var b = [];为var b = {};它将解决问题.
var b = {} 明确声明一个Object.
Javascript 数组是对象。有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Predefined_Core_Objects#Array_Object。
注意:如果您在上面的代码中为数组运算符提供一个非整数值,则将在表示数组的对象中创建一个属性,而不是数组元素。
JSON 仅支持 Javascript 的一个子集。有关详细信息,请参阅http://www.json.org/。
JSON 建立在两种结构上:
- 名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键控列表或关联数组。
- 值的有序列表。在大多数语言中,这被实现为数组、向量、列表或序列。
具有在底层对象中创建的属性的 Javascript 数组不适合这些结构中的任何一个,因为它同时具有名称/值对的集合和值的有序列表,因此没有简单的方法直接在JSON。
JSON.stringify 方法在 ECMAScript 规范中定义。例如,请参阅http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3。
虽然有很多细节,但与此相关的是对象值的字符串化方式:
如果 Type(value) 是 Object,并且 IsCallable(value) 是 false
- 如果 value 的 [[Class]] 内部属性是“Array”,则返回调用带有参数值的抽象操作 JA 的结果。
- 否则,返回调用带有参数值的抽象操作 JO 的结果。
给定您的数组,尽管向底层对象添加了参数,但结果是对数组元素的有序集进行字符串化,而不是底层对象。
向数组对象添加参数并没有错,但它们不是数组的一部分,处理数组的函数或方法可能会忽略它们或随意处理它们。您已经看到 JSON.stringify 忽略了附加参数。其他函数可能会这样做 - 您必须在每种情况下找出答案。
虽然没有错,但如果不向数组对象添加属性可能会更容易理解。如果要添加属性,请从非数组对象开始。
而不是:
var b = [];
b['foo'] = 56;
b['bar'] = 78;
Run Code Online (Sandbox Code Playgroud)
你可能会使用:
var b = {};
b['foo'] = 56;
b['bar'] = 78;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4467 次 |
| 最近记录: |