关于JS中奇怪的特性

var a = {
    value:2,
    toString:function()
    {
        console.log("........");
        return ++this.value;
    }
}

if(a==3 && a==4){
    console.log("JS is amazing");
}

如上,用toString就会输出"JS is amazing",我尝试替换了比如toLocaleString就不会输出,这是JS什么特性造就的?

阅读 2k
2 个回答

当在使用==而不是恒等时,如果原始值不相等,会触发隐式转换,即调用左值的toString方法转化为字符串再判断是否相等,所以当你把toString换成toLocaleString就无法实现.

在判断的时候,做隐式转换会调用toString方法,如果 在对象中重写了就不会去原型链上找,替换成toLocaleString它会找到原型上的toString方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题