var a = [undefined, undefined];
console.log(a.join()); // тут undefined преобразуются в пустую строку
console.log(String(undefined)); // а тут в строку 'undefined'
console.log('' + undefined); // и тут в 'undefined'
Где логика?
Вы не сразу поймете логику, пока не почитаете стандарт, как и во многих языках с автоматическим приведением типа. Выстраивать возможные связи не зная определенных тонкостей при управлении типами - бесполезно в любом языке со слабой типизацией, ведь разработчики делают так, как было удобно им, а другие разработчики как удобно им. Возможно ваши интересы сойдутся с ними и тогда вы будете в языке "как рыба в воде", но могут и не сойтись..
Проведем маленький тест..Чему равны следующие операции?
console.log(NaN === NaN);
console.log([] + []);
Подобным операциям есть логическое объяснение, но у многих людей эти операции связанные с типами на javascript за всю историю вызывали дикие споры, ведь это гибкий язык. А гибкость его необычайна, и это имеет две стороны.
Вы можете быстро написать какой-то функционал, а можете с кривыми руками написать такое от чего будет дергаться глаз. В целом так с любым языком, знайте как его применять и у вас не будет проблем. Конечно же, динамическая типизация нравится не всем и в последнее время появился типизированный язык TypeScript, который имеет свой синтаксис с автоматиматическим конвертированием в Javascript. Все думают по разному, может вы сторонник строгой типизации и он подойдет вам больше?
Есть интересное видео с конференции, где люди обсуждали подобные операции.
Вернемся к вопросу и откроем сайт Mozila с описанием стандарта:
var a = [undefined, undefined];
console.log(a.join());
Array.prototype.join() -Преобразует все элементы массива в строки и объединяет их в одну большую строку. Элемент массива с типом undefined или null преобразуется в пустую строку. Источник
console.log(String(undefined));
console.log('' + undefined);
Первый случай описан в официальном стандарте (англ) в пункте 9.8.
Второй случай описан на официальном сайте Mozila:
undefined является свойством глобального объекта, то есть, это переменная в глобальной области видимости. Начальным значением undefined является примитивное значение undefined. Переменная, не имеющая присвоенного значения, обладает типом undefined. Также возвращают undefined метод или инструкция, если переменная, участвующая в вычислениях, не имеет присвоенного значения. Функция возвращает undefined, если она не возвращает какого-либо значения. Источник
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Использую плагины jscroll, laravel mix, а так же стандартный шаблон laravelapp
Как у знать крайнюю левую позицию элемента при его перемещении у плагина jquery UI sorttable
Здравствуйте! Выполняю запрос к API Вконтакте, а именно, метод usersget