JavaScript. Подробное руководство, 6-е издание (Флэнаган) - страница 50

Преобразование объекта в строку и преобразование объекта в число выполняется вызовом соответствующего метода объекта. Все осложняется тем, что объекты в языке JavaScript имеют два разных метода для выполнения преобразований, а также наличием нескольких специальных случаев, описываемых ниже. Обратите внимание, что правила преобразования объектов в строки и числа, описываемые здесь, применяются только к объектам самого языка JavaScript. Объекты среды выполнения (например, определяемые веб-броузерами) могут предусматривать собственные алгоритмы преобразования в числа и строки.

Все объекты наследуют два метода преобразования. Первый из них называется toString(), он возвращает строковое представление объекта. По умолчанию метод toString() не возвращает ничего особенно интересного (хотя эта информация иногда может оказаться полезной, как будет показано в примере 6.4):


>({x:1, y:2}).toString() // => "[object Object]"


Многие классы определяют более специализированные версии метода >toString(). Например, метод >toString() класса >Array преобразует все элементы массива в строки и объединяет результаты в одну строку, вставляя запятые между ними. Метод >toString() класса >Function возвращает строковое представление функции, зависящее от реализации. На практике обычно реализации преобразуют пользовательские функции в строки с исходным программным кодом на языке JavaScript.

Класс >Date определяет метод >toString(), возвращающий строку с датой и временем в удобочитаемом формате (который может быть разобран средствами JavaScript). Класс >RegExp определяет метод >toString(), преобразующий объект >RegExp в строку, которая выглядит как литерал регулярного выражения:


>[1,2.3].toString() // => "1.2,3"

>(function(x) { f(x); }).toString() // => "function(x) {\n f(x);\n}"

>/\d+/g.toString() // => "/\\d+/g"

>new Date(2010,0,1).toString() // => "Fri Jan 01 2010 00:00:00 GMT+0300"


Другая функция преобразования объектов называется >valueOf(). Задача этого метода определена не так четко: предполагается, что он должен преобразовать объект в представляющее его простое значение, если такое значение существует. Объекты по своей природе являются составными значениями, и большинство объектов не могут быть представлены в виде единственного простого значения, поэтому по умолчанию метод >valueOf() возвращает не простое значение, а сам объект. Классы-обертки определяют методы >valueOf(), возвращающие обернутые простые значения. Массивы, функции и регулярные выражения наследуют метод по умолчанию. Вызов метода >valueOf() экземпляров этих типов возвращает сам объект. Класс