Есть ли случаи, когда `x.valueOf () === x` мог вернуть` false`? - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь понять метод valueOf().

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf

Есть ли ситуация, когда переменная любого типа может вернуть 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);

1 Ответ

3 голосов
/ 18 марта 2020

Переменная с пользовательским методом valueOf может возвращать значение, которое не проходит тест:

const obj = {
  valueOf() {
    return NaN;
  }
};
console.log(obj.valueOf() === obj);

Число, заключенное в объект, также вернет false:

const obj = new Number(5);
console.log(obj.valueOf() === obj);

Документация MDN выглядит обманчиво. Object.prototype.valueOf вернет объект или выдаст ошибку - см. спецификацию .

Имейте в виду, что при вызове valueOf не для объектов, таких как числа / строки / логические значения, вы Я буду использовать метод valueOf для этого конкретного примитива (например, Number.prototype.valueOf), а не Object.prototype.valueOf.

...