为什么js的"关联数组"不能转成json字符串而对象可以?

Posted 小猿笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么js的"关联数组"不能转成json字符串而对象可以?相关的知识,希望对你有一定的参考价值。

定义这么一个js的“关联数组”:

var arr = new Array();
    arr[‘school‘] = 1;
    arr[‘team‘] = 2;
    console.log(JSON.stringify(arr));

得到的结果:

[]

为什么会这样?实在不知道为什么了,但是通过:

console.log(arr.school);//1

这种方法可以取到值,这样看是存在的,但是好像又不存在,实在搞不懂
用对象的方式就正常转换:

var obj = {
    school: 1,
    team : 2
}
console.log(JSON.stringify(obj));//{"school":1,"team":2}

如果说js不支持这种关联数组的形式但为什么可以取值呢?能取到值但为什么转成json字符串就什么也没有了呢?
一句话,你的 arr 是有两个属性的空数组,数组转字符串当然是展示数组的内容,不会去遍历数组的属性!下面解释:

js不支持这种关联数组的形式但为什么可以取值呢?

因为数组本身也是对象,特殊的对象,

var arr = new Array();
    arr[‘school‘] = 1;
    arr[‘team‘] = 2;

从对象的角度来看,你只是给 arr 对象增加了两个属性,那么你取值,实际上是读取属性,当然是可以取到的的;你给 arr 增加值了么?没有!这个地方,arr 的 length 还是 0 ,也就是说,arr 还是 [] 空数组,那么你用 JSON.stringify() 显示的当然是 []

技术图片

能取到值但为什么转成json字符串就什么也没有了呢?

能取到值是因为你取的是属性,数组作为对象,当然可以设置读取属性;
转JSON什么都没有,因为 arr 是空数组呀,所以取到的值肯定是 [];

?
引申,其实数组作为特殊的对象,他的 index,本身也是他的属性,计算在length里面,你设置的 school,team 也是属性,不算在length里,通常遍历的时候,都是按照 index 遍历的,属性不遍历,如果你设置 index 的属性,默认就是设置了数组中的项了,比如你上面的代码改下,就是不同的结果:
技术图片
文章转自:https://segmentfault.com/q/1010000012785820







以上是关于为什么js的"关联数组"不能转成json字符串而对象可以?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 数组中的每个ID键关联一个值,可不可以关联两个值?

js把字符串转换成数组

PHP当中如何将数组当中的字符串数据类型转化为数值类型?

js怎么处理多维对象数组

如何将一个json数组类型的字符串转换为json数组,然后遍历数组取出json对象,最后在js中取出里面的属性?

js操作对象和数组对象 取key/value