var person={name:"wang"};
var people=[{name:"wang"}];
var morepeople=[person];
console.log(morepeople==people) //false
为什么people和morepeople的值不想等
因为JavaScript里面Array是对象,==或===操作符只能比较两个对象是否是同一个实例,也就是是否是同一个对象引用。目前JavaScript没有内置的
操作符判断对象的内容是否相同。
在网上流传很普遍的一种做法是将数组转换成字符串:
JSON.stringify(a1) == JSON.stringify(a2) 或 a1.toString() == a2.toString();但是不推荐这么操作呢,因为字符串“1”和数字1转化为String之后,
比较仍然会相等哦。
person是指向对象的一个指针,一个数组内是对象本身,一个数组内是指向对象的指针
person是指向对象的一个指针,一个数组内是对象本身,一个数组内是指向对象的指针
数组和对象的比较和原始值(string,null,undefined,number)的比较不一样,js中任何两个一模一样的单独对象(所有的属性一模一样)或者数组都是不相等的,除非两个对象是指向同一种引用:例如-- var a=['1'] ,b=a; console.log(a==b) //true)
因为javascript中的所有对象都是引用类型,两个对象比较其实是两个对象的引用的比较,所有只要两个引用一样,那这两个才相等!
数组和对象的比较和原始值(string,null,undefined,number)的比较不一样,js中任何两个一模一样的单独对象(所有的属性一模一样)或者数组都是不相等的,除非两个对象是指向同一种引用:例如-- var a=['1'] ,b=a; console.log(a==b) //true)
因为javascript中的所有对象都是引用类型,两个对象比较其实是两个对象的引用的比较,所有只要两个引用一样,那这两个才相等!