在下面,如果b的条件值是js。有人可以解释它是如何获得它的价值的吗?
var b= {
id: "js",
toString: function(){
return "js";
}
}
if(b=="js"){
console.log("yes, value of b is js")
};
答案 0 :(得分:4)
b
的值不是“js”,但其字符串表示为。当需要将对象显示为字符串时,浏览器会调用.toString()
。对于大多数对象,这将默认为:
[object Object]
但是,由于您已经实现了.toString()
,它会调用该实现并显示:
js
删除.toString()
的实现,或以不同方式实现它,并亲自查看。
答案 1 :(得分:2)
Javascript会自动从对象调用.toString函数。大多数对象都有这个功能,但它会像object,String等。
您的对象已经定义了此toString函数。所以你应该这样读:
if( b.toString() == "js" ) { }
or
if( b + "" == "js" ){}
答案 2 :(得分:1)
因为您已经实施了toString()
,这是在进行弱类型检查时调用的,==
。
答案 3 :(得分:1)
您正在覆盖对象toString
的{{1}}并返回值b
,只要b显示为字符串http://jsfiddle.net/o1x7rby2/,就会将b设置为“js”, http://jsfiddle.net/o1x7rby2/2/
,http://jsfiddle.net/o1x7rby2/1/你可以比较这些小提琴
答案 4 :(得分:0)
作为对象的b
被转换为String
,因为它与String
的{{1}}进行比较,而==
则通过调用{toString
进行比较1}}方法,您已重新实施以始终返回"js"
。
所以实际发生的是
if("js" == "js")
但严格的opertator ===
将返回false,因为没有转换。