是否存在 `x.valueOf() === x` 可能 return `false` 的情况?
Are there any cases where `x.valueOf() === x` could return `false`?
我正在尝试了解 valueOf()
方法。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf
是否存在任何类型的变量都可以 return false
进行以下检查的情况?
x.valueOf() === x
const obj = {};
const str = "abc";
const strNum = "123";
const number = 123;
const arrStr = ["a","b","c"];
const arrNum = [1,2,3];
console.log(obj.valueOf() === obj);
console.log(str.valueOf() === str);
console.log(strNum.valueOf() === strNum);
console.log(number.valueOf() === number);
console.log(arrStr.valueOf() === arrStr);
console.log(arrNum.valueOf() === arrNum);
具有自定义 valueOf
方法的变量可能 return 一个未通过测试的值:
const obj = {
valueOf() {
return NaN;
}
};
console.log(obj.valueOf() === obj);
包裹在对象中的数字也会 return false:
const obj = new Number(5);
console.log(obj.valueOf() === obj);
MDN 文档看起来具有误导性。 Object.prototype.valueOf
将 return 对象或抛出错误 - 请参阅 specification.
请记住,在非对象上调用 valueOf
时,例如 numbers/strings/booleans,您将调用 那个特定基元的 valueOf
方法(例如Number.prototype.valueOf
),而不是Object.prototype.valueOf
.
我正在尝试了解 valueOf()
方法。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf
是否存在任何类型的变量都可以 return false
进行以下检查的情况?
x.valueOf() === x
const obj = {};
const str = "abc";
const strNum = "123";
const number = 123;
const arrStr = ["a","b","c"];
const arrNum = [1,2,3];
console.log(obj.valueOf() === obj);
console.log(str.valueOf() === str);
console.log(strNum.valueOf() === strNum);
console.log(number.valueOf() === number);
console.log(arrStr.valueOf() === arrStr);
console.log(arrNum.valueOf() === arrNum);
具有自定义 valueOf
方法的变量可能 return 一个未通过测试的值:
const obj = {
valueOf() {
return NaN;
}
};
console.log(obj.valueOf() === obj);
包裹在对象中的数字也会 return false:
const obj = new Number(5);
console.log(obj.valueOf() === obj);
MDN 文档看起来具有误导性。 Object.prototype.valueOf
将 return 对象或抛出错误 - 请参阅 specification.
请记住,在非对象上调用 valueOf
时,例如 numbers/strings/booleans,您将调用 那个特定基元的 valueOf
方法(例如Number.prototype.valueOf
),而不是Object.prototype.valueOf
.