Типы данных
В этом примере console.log(3 * 'hello'); если мы попытаемся умножит строку и число, то выведется NaN. Это вызвано, тем что не нельзя умножать разные типы данных. Если попытаться выполнить console.log(3 * '3'); интерпритатор справится он постарается привести к одному типу данных, а именно к числу.
Undefined
Если мы объявим пустую переменную и постараемся ее вывести то получим undefined, то есть пустота. Также ещё может быть при обращении к несуществующему индексу в каком либо слове.
Неизменяемость примитивных типов
Если мы попытаемся изменить первую букву в слове, то выведется тоже самое. Это связано из-за неизменяемости примитивных типов. Если нужно поменять значение, то вызывается переменная и присваевается новое значение.
Слабая типизация
console.log(3 + '2'); Здесь интерпретатор посчитает 32. Получается такой ответ, потому что интерпретатор преобразовывает 3 к строке и просто склеивает их. Язык js со слабой типизацией, он знает о строках и числах, но так не во всех языках программирования. Также, если мы в строках попробуем получить остаток от деления, то получим ошибку.