let obj = {
toString() {
return "2";
}
};
let n = +obj;
alert(n);
因为+ obj需要一个数字,所以它不应该使用valueOf()原型进行类型转换,该类型转换返回对象。相反,它使用toString()方法和警报2。请问为什么会这样?
因为
+obj
需要一个数字,所以它不应该使用valueOf()
原型进行类型转换并返回对象。
实际上是确实调用valueOf
方法。但是由于-如您所说-它返回一个对象,而不是原始值,因此发现它没有用。然后,替代方法称为:toString()
,它does返回原始值,该原始值随后转换为数字。
您可以尝试
const obj1 = {
valueOf() { console.log("valueOf 1"); return this; },
toString() { console.log("toString 1"); return "1"; },
};
console.log(+obj1);
const obj2 = {
valueOf() { console.log("valueOf 2"); return 2; },
toString() { console.log("toString 2"); return "2"; },
};
console.log(+obj2);
您应该通过parseInt()函数更改de toString()函数以获得NaN响应。
let obj = {
parseInt() {
return "2";
}
};
let n = +obj;
alert(n);