JavaScript中的toString():为什么toString()仍然会被调用,因为存在数字的valueOf()原型

问题描述 投票:0回答:2
let obj = {
    toString() {
        return "2";
    }
};

let n = +obj; 

alert(n);

因为+ obj需要一个数字,所以它不应该使用valueOf()原型进行类型转换,该类型转换返回对象。相反,它使用toString()方法和警报2。请问为什么会这样?

javascript type-conversion prototype tostring
2个回答
0
投票

因为+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);

-2
投票

您应该通过parseInt()函数更改de toString()函数以获得NaN响应。

let obj = {
    parseInt() {
        return "2";
    }
};

let n = +obj; 

alert(n);
© www.soinside.com 2019 - 2024. All rights reserved.