Почему в Javascript выражение false+[] вернет строку 'false'?
Не понимаю логику JS. Ведь у пустого массива есть численное представление: +[] вернет 0. А тут произошла конкатенация, необходимым условием для которой является один из аргументов - строка. Так вот, почему JS в данном случае представляет пустой массив как строку, а не число?
Ведь у пустого массива есть численное представление: +[] вернет 0.
И что с того? В выражении false+[] нет преобразования массива в число. Есть сложение - массив преобразовывается в строку, false тоже. Если интересуют детали - можете ознакомится со спецификацией.
Вот это и хочется понять, почему тут при сложении массив преобразовывается в строку, а не число. Подскажешь вкратце что говорит об это спека? А то с англ не очень, да и сейчас искать долго, а любопытство не даёт уснуть)
umberford, вы что, всерьёз ждёте, что я вам буду пересказывать спецификацию? Нет, не буду. Разбирайтесь сами. "С англ не очень"? - ну, так подтяните уровень, слабый английский - для программиста это почти профнепригодность. "Искать долго" - ничего искать не надо, я вам дал ссылку на описание того, как работает оператор сложения.
1) С одной стороны я с трудом понимаю что либо в этом описании спецификации ))).
Ну, что поделаешь... не все люди быстро соображают. С другой есть куча описаний более простых, было бы желание их искать )))).
2) Частенько удивляет нежелание задающих вопросы напрягаться , чтобы понять даденный им ответ. Дашь подсказку, а тебя еще и разжевать просят.
Ребята , без напряжения мозгов прогресса НЕТ!
При сложении если хотя бы один операнд это ОБЪЕКТ , он преобразовывается к примитиву (строка , бул или число).
При преобразовании массива к примитиву используется join , т.е получается строка. Пустой массив - пустая строка.
Ну , и false + '' = 'false' ;
Складывать в JS можно числа и строки, когда JS видит оператор сложения + , он пытается то что слева и справа от + привести либо в число либо в строку!
Пустой массив [] можно привести к примитиву при помощи метода [].toString() - который и дает строку!!!!
Если массив не пустой [1,2] - то будет '1,2'
Пример из собеседования на junior frontend разработчика -
typeof(1 / []) - будет Number! Выдаст он NaN - а на NaN как известно числовой тип)