JavaScript метод Object.valueOf()

Определение и применение

JavaScript метод Object.valueOf() возвращает примитивное значение указанного объекта, он вызывается без аргументов.

По умолчанию, метод valueOf() наследуется каждым объектом, произошедшим от объекта Object, он автоматически вызывается когда встречается объект там, где ожидается элементарное значение.

Как правило, метод valueOf() не вызываются явно, а переопределяется в пользовательских объектах, если этот метод не переопределён в пользовательском объекте, то метод valueOf() возвращает сам объект. Для объектов типа Object элементарное значение отсутствует, и метод такого объекта возвращает сам объект.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Object.valueOf
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
valueOf✓1✓12✓1✓3✓1✓18✓4✓10.1✓1✓1.0✓1✓1

поддерживается с ограничениями нет поддержки нет данных≤31 — не позднее версии 31

JavaScript синтаксис:

JavaScript
obj.valueOf();

Версия JavaScript

ECMAScript 1 (реализовано в JavaScript 1.1)

Пример использования

JavaScript
let obj = {  // инициализируем переменную, содержащую объект
    a: 1,
    b: 2,
    c: () => (this.a + this.b)
};

obj.valueOf(); // {a: 1, b: 2, c: () => (this.a + this.b)}

В этом примере мы инициализировали переменную, содержащую объект и с помощью метода valueOf() мы возвращаем примитивное значение указанного объекта.

В следующем примере мы с Вами рассмотрим как переопределить метод valueOf() по умолчанию:

JavaScript
// создадим функцию конструктор
function Calc( a, b ) {
  this.a = a;
  this.b = b;
}

// создаем объект типа Calc и инициализируем им переменную
let first = new Calc( 5, 15 );

first.valueOf();  // {a: 5, b: 15}

// переопределяем метод valueOf() по умолчанию
Calc.prototype.valueOf = function() {
    return this.a + this.b;
};

first.valueOf();  // 20

// создаем объект типа Person и инициализируем им переменную
let second = new Calc( 2, 3 );

second.valueOf();  // 5

В этом примере мы создали функцию конструктор Calc и создали объект типа Calc, которым инициализировали переменную. После этого мы вызываем метод valueOf() на пользовательском объекте и в качестве возвращемого значения по умолчанию (унаследованное от Object) получаем примитивное значение указанного объекта (сам объект).

После этого мы переопределяем метод valueOf() по умолчанию, который возвращает, сумму значений свойств a и b объекта и вызываем метод valueOf() снова. Обратите внимание, что в этот раз мы получаем более полезную информацию. Далее мы создаем еще один объект типа Calc и так же используем метод valueOf().