nic*_*oum 6 javascript object coercion
该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);Run Code Online (Sandbox Code Playgroud)
当对象需要转换为truthy. 既然x == true和!!x有不同的行为,那么我猜测没有任何功能可以改变它。我代替试图延伸类型,其truthy是false但得到由唯一接受的值Object.create就是null这几乎是相同的对象文本(现在没有的的Object.prototype属性)。
foo == true实际上转换foo为数字,这就是为什么valueOf有效,但它具有误导性。
您可以{} == true在这里尝试查看执行了比较算法的哪些步骤(免责声明:我做到了)。
!foo但是调用ToBoolean,它总是显式返回true一个对象。没有办法覆盖这种行为。
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |