Sel*_*gam 6 javascript arrays json associative-array object
我试图将声明为数组对象的类似数组的对象进行字符串化,并发现JSON.stringify在定义为数组对象时未正确处理类似数组的对象.
请参阅下面的更清晰, - > jsFiddle
var simpleArray = []; //note that it is defined as Array Object
alert(typeof simpleArray); // returns object -> Array Object
simpleArray ['test1'] = 'test 1';
simpleArray ['test2'] = 'test 2';
alert(JSON.stringify(simpleArray)); //returns []
Run Code Online (Sandbox Code Playgroud)
它工作正常,{"test1":"test 1","test2":"test 2"}当我改变时回来了
var simpleArray = [];到var simpleArray = {};.
有人可以提供一些亮点或一些参考,我可以阅读更多?
编辑:
问题:当typeof simpleArray = []和simpleArray = {}返回的对象时,为什么JSON.stringify {"test1":"test 1","test2":"test 2"}在两种情况下都无法返回?
区别在于索引。当您使用数组时,[]索引只能是正整数。
所以下面的说法是错误的:
var array = [ ];
array['test1'] = 'test 1';
array['test2'] = 'test 2';
Run Code Online (Sandbox Code Playgroud)
因为test1和test2不是整数。为了修复它,您需要使用基于整数的索引:
var array = [ ];
array[0] = 'test 1';
array[1] = 'test 2';
Run Code Online (Sandbox Code Playgroud)
或者如果你声明一个 javascript 对象,那么属性可以是任何字符串:
var array = { };
array['test1'] = 'test 1';
array['test2'] = 'test 2';
Run Code Online (Sandbox Code Playgroud)
这相当于:
var array = { };
array.test1 = 'test 1';
array.test2 = 'test 2';
Run Code Online (Sandbox Code Playgroud)
你不需要数组。当您想要 JavaScript 中的“关联数组”时,您实际上需要一个对象,{}.
您可以通过以下方式区分它们instanceof Array:
[] instanceof Array // true
({}) instanceof Array // false
Run Code Online (Sandbox Code Playgroud)
编辑:它可以处理它。它序列化数组的所有元素。然而,作为一个元素,必须有一个数字键。在这种情况下,没有。
这并不是 JSON 独有的。toSource与和属性一致length。
| 归档时间: |
|
| 查看次数: |
3085 次 |
| 最近记录: |