Прилетело мне тут приглашение на собеседование. История довольно странная, тянется уже больше месяца, но завтра техническое интервью с лидом и кучей начальников.

В общем, пока жду, чем это всё кончится, поделюсь с вами приколюхами, которые обнаружил, освежая знания по Javascript.

Сравнение разных типов данных в JS является своего рода мемом, так как зачастую типы приводятся к совершенно неожиданным вещам. Например: ’ \t\r\n’ == 0 // приведет к true, [] == ![] // тоже, -0 === +0 // вернет true, NaN === NaN // вернет false.

Конечно, если убрать шутки в сторону, то можно увидеть, что за этим стоят различные мотивации: что-то сложилось исторически, а что-то осталось во имя обратной совместимости.

Вот одна из интересностей: Object.is(). Был введен в ES6, чтобы исправить некоторые “странности” при строгом сравнении.

Object.is(-0, +0) вернет false, Object.is(NaN, NaN) вернет true, в отличии схожих примеров строгого сравнения выше.

Еще интересная вещица: Array.prototype.flat(Infinity). Синтаксически элегантный способ сделать массив любой вложенности плоским, но, конечно, держим в уме производительность.

const arr = [1, [2, 3], [4, [5, 6]]]; arr.flat(Infinity) // [1, 2, 3, 4, 5, 6]

На последок поделюсь еще мелочью. Хотя, это скорее лично для меня. Array.prototype.reduce() - мне всегда было плохо понятно использование слова reduce, я никак не мог привязать к какой-то идее название метода, чтобы лучше осознать его смысл.

Наткнулся на хорошую формулировку:

Array.prototype.reduce() is a versatile method for iterating through an array and reducing it to a single value.

Гибкий метод для итерации по массиву и сведения его к одному значению.

Мне не хватало вот этой части, чтобы уложить суть метода в знаниях.

Короче, сколько JS не учи, всегда найдется новый сюрприз. Учим дальше.

#ищуработу #javascript