为什么变量b的值是" js"在这个JavaScript代码中?

时间:2014-12-08 13:39:35

标签: javascript

在下面,如果b的条件值是js。有人可以解释它是如何获得它的价值的吗?

var b= {
    id: "js",
    toString: function(){
        return "js";
    }
}
if(b=="js"){
    console.log("yes, value of b is js") 
};

5 个答案:

答案 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,因为没有转换。