昨晚看《javascript高级程序设计》的书的时候,书中的一个示例不明白,代码是这样子的:
var person={ name:"cc" }
var people=[{ name:"cc" }]
var morePeople=[ person ]
alert(people.indexOf(person)) //-1
alert(morePeople.indexOf(person)) //0
后面一个输出结果能理解,但是为什么第一个输出是-1呢?因为-1代表着要查找的这个元素在父元素中是不存在的。后来跟同事请教了一下,原来是这样子的:这个person是一个对象,在js中它是属于复杂数据类型的,js的另一种数据类型是基本数据类型,比如Number,String,Boolean,Null,Underfine,当引用这2种数据类型的时候,基本数据类型是按值引用的,而复杂数据类型是按地址引用的。
放在题目这里的话,在morePeople中能够找到person这是能够理解的,因为morePeople中的对象就是引用person的对象地址,而在people中找不到person是因为,当查找person的时候是拿person的地址去匹配people中是否也有这个相同地址的对象,显然person的地址跟数组中对象元素的地址是不一样的,所以indexOf就会返回-1(不存在)
网友评论