Стадии пробразования
Преобразование объектов в строку интерпретатор JavaScript выполняет в два этапа:
• Если объект имеет метод toString()
, интерпретатор вызывает его. Если он возвращает простое значение, интерпретатор преобразует значение в строку (если оно не является строкой) и возвращает результат преобразования.
• Если объект не имеет метода toString()
или этот метод не возвращает простое значение, то интерпретатор проверяет наличие метода valueOf()
. Если этот метод определен, интерпретатор вызывает его. Если он возвращает простое значение, интерпретатор преобразует это значение в строку (если оно не является строкой) и возвращает результат преобразования.
• В противном случае интерпретатор делает вывод, что ни toString()
, ни valueOf()
не позволяют получить простое значение и возбуждает исключение TypeError
При преобразовании объекта в число интерпретатор выполняет те же действия что и при преобразовании в строку, но первым пытается применить метод valueOf()
:
• Если объект имеет метод valueOf()
, возвращающий простое значение, интерпретатор преобразует (при необходимости) это значение в число и возвращает результат.
• Иначе, если объект имеет метод toString()
, возвращающий простое значение, интерпретатор выполняет преобразование и возвращает полученное значение.
• В противном случае возбуждается исключение TypeError