使用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
,它几乎与对象文字相同(没有Object.prototype
属性)。
foo == true
实际上将foo
转换为数字,这就是valueOf
工作的原因,但它具有误导性。
You can try {} == true
here看看比较算法的哪些步骤被执行(免责声明:我做到了)。