Численное преобразование
Для численного преобразования объекта используется метод 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
есть у любых объектов. Но он ничего не делает, просто возвращает сам объект (не-примитивное значение!), а потому игнорируется.