可以使用string
函数覆盖toString
强制。
可以使用number
函数覆盖valueOf
强制。
boolean
强制也可以使用valueOf
函数覆盖。
var foo = {
toString: function() {
console.log("To String");
return "bar";
},
valueOf: function() {
console.log("Value Of");
return 5;
}
};
console.log(`${foo}`);
console.log(+foo);
console.log(foo == true);
console.log(!!foo);
我无法找到当对象需要转换为truthy
时需要调用的函数。由于x == true
和!!x
的行为不同,所以我猜想没有函数可以改变这种情况。相反,我尝试扩展truthy
为false
的类型,但Object.create
唯一接受的值是null
,它几乎与对象文字相同(没有{ {1}}个属性)。
答案 0 :(得分:3)
foo == true
实际上将foo
转换为数字,这就是valueOf
起作用的原因,但它具有误导性。
You can try {} == true
here来查看比较算法的哪些步骤被执行(免责声明:我做到了)。