javascript 中对象与字符串的比较

今天突然想比较一下 new String("a") 与 "a" 的异同; 发现
new String("a") == "a"; 成立
new String("a") === "a"; 不成立

也好理解,前者是一个对象,后者是一个字符串;不过对象是怎么和字符串做模糊比较的呢?
于是想到了toString(); 建了一个对象,重写了toString() 函数,如:

var obj = {
toString:function(){return "b";}
}

obj == "b"; 成立

于是认为对象toString()之后和字符串做比较的,和同事说了以后,同事认为应该是valueOf() 之后比较的,我想也有道理,于是做了下面的测试:
var obj = {
toString : function(){
return
"a";
},
valueOf : function(){
return
"b";
}
};
console.log(obj == "a");  // 不成立
console.log(obj == "b");  // 成立

一般情况下,valueOf() 是对象自身,还是一个对象,和字符串比较时,还是要toString() 的; 但是我让valueOf()返回字符串,就不需要再toString() 了;
比较时确实是通过valueOf比较的

---------------------------

=== 与 == 的区别
前者要求不需是同一个,相同的地址;
后者要求类型转换后相同就行了。

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据