定义这么一个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