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

Why value of variable b is "js" in this JavaScript code?

本文关键字:代码 js JavaScript 变量 为什么      更新时间:2023-09-26

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

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

b的值不是"js",但它的字符串表示是。 浏览器在需要将对象显示为字符串时调用.toString()。 对于大多数对象,这将默认为以下内容:

[object Object]

但是由于您已经实现了 .toString() ,它会调用该实现并显示:

js

删除.toString()的实现,或者以不同的方式实现它,自己看看。

Javascript将自动从对象调用.toString函数。大多数对象都有这个函数,但会像对象、字符串等。

您的对象已经定义了此 toString 函数。所以你应该这样读:

if( b.toString() == "js" ) { }
or
if( b + "" == "js" ){}

因为你已经实现了toString(),这是在执行弱类型检查时调用的,所以== .

您正在覆盖对象btoString并返回值,js每当 b 显示为字符串时,这会将 b 设置为 "js",http://jsfiddle.net/o1x7rby2/、 http://jsfiddle.net/o1x7rby2/2/,http://jsfiddle.net/o1x7rby2/1/您可以比较这些小提琴

作为

对象的b被类型转换为String,因为它正在与==不太严格的String进行比较,并且这是通过调用toString方法来实现的,您已经重新实现该方法以始终返回"js"

所以实际上发生的事情是

if("js" == "js")

但是严格的操作符===将返回 false,因为没有发生转换。