先来一个小栗子
var a = {a: 2}
var arr = [a]
console.log(arr.indexOf(a)) // 输出 0
这段代码看着没问题
下面魔法来了
var arr = [{a: 2}]
console.log(arr.indexOf({a: 2})) // 输出 -1
var arr = [{a: 2}]
var a = {a: 2}
console.log(arr.indexOf(a)) // 输出 -1
黑人问号?????why???
一顿百度
原来两个引用类型比较的时候,是比较的引用地址,两个对象的引用地址不可能相同,除非他们是复制出来的(var a = b,这样他们的引用地址才是一样的)
延伸一下
var arr = [{a : 2}]
arr.map(item => {
fun(item)
})
function fun (arg) {
console.log(arr.indexOf(arg)) // 输出0 这就是引用地址的复制
}