var x = 1;
var obj = {
valueOf: function() {
x = 2;
return 0;
}
};
console.log(x); //1
console.log(obj.valueOf()); //0
console.log(obj); //Object
console.log(obj == 0,x); // true 2
1问:为什么都是输出x,两者值不同?
2问:obj出来的是个Object,为什么和0比较会true?
3问:接上问,出现true,是因为==的类型转换吗?那我把obj里的valueOf改成其它对象名,为什么就变成false了(如下)?
var x = 1;
var obj = {
asd: function() {
x = 2;
return 0;
}
};
console.log(x); //1
console.log(obj.asd()); //0
console.log(obj); //Object
console.log(obj == 0,x); // false 2
x = 2
把外部的x值给改了。相等比较的东西仅供参考,因为我记不清了,可能有错误。
也就是会先调用
valueOf
,如果拿到的不是基本数据类型(这一点不太确定)还会再调用toString
。好像Date类型的数据调用的顺序也不一样,你再自己查查相等判断的规则吧。