Чтобы подкрепить то, что было ранее ранее.
Основная причина этого поведения частично объясняется слабо типизированным характером JavaScript. Например, выражение 1 + «2» неоднозначно, поскольку существуют две возможные интерпретации, основанные на типах операндов (int, string) и (int int):
Таким образом, с различными типами ввода возможности вывода увеличиваются.
Алгоритм сложения
Примитивы JavaScript - это строка, число, значение null, undefined и boolean (Symbol скоро появится в ES6). Любое другое значение - это объект (например, массивы, функции и объекты). Процесс принуждения для преобразования объектов в примитивные значения описывается таким образом:
Примечание: для значений даты , порядок должен вызывать toString до valueOf.
. Знание различных значений принуждения типов в JavaScript помогает сделать путаные результаты более ясными. См. Таблицу принуждения ниже
+-----------------+-------------------+---------------+
| Primitive Value | String value | Numeric value |
+-----------------+-------------------+---------------+
| null | “null” | 0 |
| undefined | “undefined” | NaN |
| true | “true” | 1 |
| false | “false” | 0 |
| 123 | “123” | 123 |
| [] | “” | 0 |
| {} | “[object Object]” | NaN |
+-----------------+-------------------+---------------+
. Также хорошо знать, что оператор JavaScript + является лево-ассоциативным, поскольку это определяет, какие результаты будут иметь случаи, связанные с более чем одной операцией.
Использование таким образом 1 + «2» даст «12», потому что любое добавление, включающее строку, всегда будет по умолчанию для конкатенации строк.
Вы можете прочитать больше примеров в в этом сообщении в блоге (отказ от ответственности я написал).