Оператор +
не определен для массивов .
В результате Javascript преобразует массивы в строки и объединяет их.
Обновление
Поскольку этот вопрос и, следовательно, мой ответ получают много внимания, я чувствовал, что было бы полезно и уместно иметь обзор о том, как оператор +
ведет себя в целом.
Итак, вот и все.
За исключением E4X и специфических для реализации вещей, Javascript (начиная с ES5) имеет 6 встроенных типов данных :
- Не определено
- Нулевой
- Boolean
- номер
- Строка
- Object
Обратите внимание, что хотя typeof
несколько сбивает с толку, возвращает object
для Null и function
для вызываемых объектов, фактически Null не является объектом, и, строго говоря, в реализациях Javascript, соответствующих спецификации, все функции считается объектами.
Правильно - в Javascript нет примитивных массивов как таковых; только экземпляры объекта под названием Array
с некоторым синтаксическим сахаром для облегчения боли.
Добавляя больше к путанице, объекты-оболочки, такие как new Number(5)
, new Boolean(true)
и new String("abc")
, имеют тип object
, а не числа, логические значения или строки, как можно было бы ожидать. Тем не менее для арифметических операторов Number
и Boolean
ведут себя как числа.
Полегче, а? После всего этого мы можем перейти к самому обзору.
Различные типы результатов +
по типам операндов
|| undefined | null | boolean | number | string | object |
=========================================================================
undefined || number | number | number | number | string | string |
null || number | number | number | number | string | string |
boolean || number | number | number | number | string | string |
number || number | number | number | number | string | string |
string || string | string | string | string | string | string |
object || string | string | string | string | string | string |
* относится к Chrome13, FF6, Opera11 и IE9. Проверка других браузеров и версий оставлена для читателя в качестве упражнения.
Примечание: Как указано CMS , для определенных случаев объектов, таких как Number
, Boolean
и пользовательских, оператор +
не обязательно производит строковый результат. Это может варьироваться в зависимости от реализации преобразования объекта в примитив. Например, var o = { valueOf:function () { return 4; } };
оценка o + 2;
производит 6
, number
, оценка o + '2'
производит '42'
, string
.
Чтобы увидеть, как была сгенерирована обзорная таблица, посетите http://jsfiddle.net/1obxuc7m/