看到别人提的一个问题,说为什么,他们是fasle
然后自己也测试了一番觉得应该是这样的,
var a=[1,2,3,4]; var b=a; var c=[1,2,3,4]; if(a==b){ alert true; //true }else{ alert false; } if(a==c){ alert true; }else{ alert false; //false }
a是引用类型,指向一块内存,var b=a,相当于b也指向a的那块内存,两个对象相比较,比较的是是不是同一个对象,也就相当于指向的是不是同一个内存地址,显然b==a是true
c是又新建了一个对象,他指向的是另一块内存,存放的内容与a相同而已,a和c相比较,显然他俩指向的不是一个对象,不是相同的内存地址
同之前看到的问题一样,slice相当于新建了一个数组,同c的情况一样,所以他俩比较返回false。
什么情况下可以相等,找到了一个别人的列子,但无非就是上面所说的原理,指向同一块内存的时,相等
function person(name) { this.name=name; } var p1 = new person("p1"); var p2 = new person("p2"); console.log(p1 == p2); //false person.prototype.sayHi = function() { // do sayHi here } console.log(p1.sayHi() == p2.sayHi()); //true console.log(p1.sayHi() === p2.sayHi()); //true