2013-07-21 2 views
4

В последнее время я экспериментировал с node.js, и я узнал, что у javascript есть синтаксическая логика, с которой я не мог обернуть голову. Это пример, который я не понимаю, и мне было интересно, является ли это просто случайным фактом javascript или если есть какая-то логика.Почему [] + [] возвращает пустую строку?

ответ

8

Знак плюс представляет собой либо арифметическое, либо конкатенацию строк. Пустые массивы преобразуются в пустые строки в случае [] + [].

Метод Array's toString возвращает одну строку, которая представляет собой список всех элементов массива, разделенный запятой.

От MDN ссылка выше:

JavaScript автоматически вызывает метод ToString когда массив должен быть представлен как текстовое значение или когда массив упоминается в конкатенации.

Та же идея автоматического преобразования типа почему true + true === 2, и тип преобразования является основой многих сложных викторины JavaScript как this one.

+3

+1 по существу правильный ответ. Собственно говоря, массивы _converted_ для строк (посредством вызова 'toPrimitive()'), а не отбрасываются. См. [Спецификация EcmaScript] (http://es5.github.io/#x11.6.1) –

+0

@TedHopp - Спасибо за улов. Немного расширил ответ. –

3

Для не примитивных типов, таких как массивы, для применения добавления он должен быть преобразован в примитивный, ToPrimitive, вызывать toString() для не примитивных типов. Таким образом, в этом случае [] становится «» и, следовательно, «», как результат.

Смежные вопросы