是否存在 `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.