为什么变量 b 的值在这个 JavaScript 代码中是“js”
Why value of variable b is "js" in this JavaScript code?
在下面的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()
,这是在执行弱类型检查时调用的,所以==
.
您正在覆盖对象b
的toString
并返回值,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,因为没有发生转换。
相关文章:
- Meteor JS中代码的重复使用部分
- 骨干模型默认值-todos.js示例中不必要的代码
- 为什么indexOf在这个js代码中不起作用
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- js代码从jQuery转换为原生代码
- JS代码中的减号
- 将JS函数传递给Emscripten生成的代码
- 谷歌地图Api和JS代码不工作
- HTML 5 和 3.js 代码不会在网页上显示任何内容
- Node.js:异步代码 + js 闭包的问题
- Chrome 开发者工具 - 控制台.log原生代码 JS
- 为jQuery和KNOCKOUT通用化javascript代码.js成为一个可重用的模块
- .ninnerHtml代码(JS/JQuery)无法识别html表中的动态内容
- 生成唯一的6位代码js
- 我得到了“;赋值中的左侧无效“;在我的代码(JS)中
- 更改代码(JS)中JQuery Mobile Calendar日期的状态
- 如何改进代码JS(Jquery)?一个简单的下拉列表
- 从传输中了解代码.js
- 这段代码(JS)的区别是什么?
- JavaScript倒计时计时器代码[JS]