Прилетело мне тут приглашение на собеседование. История довольно странная, тянется уже больше месяца, но завтра техническое интервью с лидом и кучей начальников.
В общем, пока жду, чем это всё кончится, поделюсь с вами приколюхами, которые обнаружил, освежая знания по 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 не учи, всегда найдется новый сюрприз. Учим дальше.
· 23.06
Переходи на TS в строгом режиме, чтобы забыть про это и покушать другое :D
ответить
коммент удалён
· 23.06
Да без TS никуда сейчас, это известно. Другое дело, что нужно возвращаться к базе, чтобы становиться лучше)
ответить
ответ удалён