Численное преобразование

Для численного преобразования объекта используется метод valueOf, а если его нет – тоtoString:

var room = {
  number: 777,

  valueOf: function() { return this.number; },
  toString: function() { return this.number; }
};

alert( +room );  // 777, вызвался valueOf

delete room.valueOf; // valueOf удалён

alert( +room );  // 777, вызвался toString

Метод valueOfобязан возвращать примитивное значение, иначе его результат будет проигнорирован. При этом – не обязательно числовое.

У большинства встроенных объектов такогоvalueOfнет, поэтому численное и строковое преобразования для них работают одинаково.

Исключением является объектDate, который поддерживает оба типа преобразований:

alert( new Date() ); // toString: Дата в виде читаемой строки
alert( +new Date() ); // valueOf: кол-во миллисекунд, прошедших с 01.01.1970

PS: Если посмотреть в стандарт, то в пункте 15.2.4.4 говорится о том, что valueOfесть у любых объектов. Но он ничего не делает, просто возвращает сам объект (не-примитивное значение!), а потому игнорируется.


results matching ""

    No results matching ""