Comments 27
Многие почему-то используют для преобразования string в number функцию
parseInt()
Потому что это явно читается, в отличие от унарного плюса?
Вместо функции
Math.floor()
для округления числа можно использовать оператор~~
Тоже ужасный совет. Действительно, зачем использовать функцию, по имени которой понятно, что она делает, лучше использовать хак с битовыми операторами.
более быстрый способ обрезать число с плавающей точкой до целого числа, используя | оператор побитового ИЛИ
Опять-таки. Вам точно нужен этот микроскопический буст в производительности, который можно заметить только при миллионах итераций?
Потому что это явно читается, в отличие от унарного плюса?
Разве в этом проблема? Это вобще разные операции
let i = "1.23"
console.log(+"1.23")
console.log(parseInt(i))
Вывод
1.23
1
Если я использую parseInt то я явно указываю что я хочу получить на выходе. В случае же использования "+" и не корректной строки - я даже не получаю исключение, а просто NaN на выходе.
Поведение у этих операций абсолютно разное. Они вобще для разных целей сделаны.
Действительно, зачем использовать функцию, по имени которой понятно, что она делает, лучше использовать хак с битовыми операторами.
В JS нет целочисленных типов, и соответственно целочисленной арифметики, а писать Math.floor для каждой операции задалбывает.
Метод parseInt
может в некоторых случаях сыграть злую шутку, когда на вид всё понятно, но работает совсем не так, например:
['1', '2', '3'].map(parseInt)
Преобразование String в Number
Преобразование значения в Boolean
Быстрое преобразование Float в Integer
Всё-таки в коде лучше использовать функции которые понятны. Когда потом это всё будет минимизироваться, вот там уже пусть преобразовывает во что-то другое. Но для разработчика чем понятнее код тем лучше.
Вместо функции
Math.floor()
для округления числа можно использовать оператор~~
Только для положительных чисел!
Вся статья выглядит как один большой ниндзя-паттерн
Если бы привели примеры, как использовать "улучшения", было бы много эффективнее подача Вашего материала.
Ну и тернарный оператор, + и ~~ точно не улучшают читабельность кода
Дня отбрасывания дробной части ни floor, ни ceil, ни round не подходят - для этого есть Math.trunc().
А рекламу телеги в начале автор поместил, т.к. боялся, что до конца никто читать не станет?
Возможности js , о которых лучше и не знать.
Мне бы хотелось вообще о js не знать. Но такой привилегии у нас, к сожалению нет. Всегда он где-то вылазит
Почему же? Второе очень сократило код, убрав кучу проверок, а шестое позволило отличать null/undefined от 0. Скажем, написал text = data?.b ?? 'Не найдено' и знаешь, что если в b будет ноль, то он присвоится как ноль, а если b не обнаружится, то будет соответствующая надпись. Удобно, когда нужно вывести что-то с сервера, но сервер может это и не прислать.
Коллеги-фронтендеры, не используйте где попало spread (...) оператор. Если массивы большие и постоянно пересчитываются вашими любимыми фреймворками (и "не фреймворками", а библиотеками))) при каких-либо изменениях, то вы просто уничтожаете память и производительность.
2. Оператор ? для упрощения
Хотелось бы упоминания, что это зовётся Optional chaining, дабы можно было его сгуглить. Ну, и ссылку на MDN. И MDN таки говорит, что оператор имеет вид ?., а не просто ?
В примере использования не хватает использованися с массивами:
a = {x: 10}
a.b[1] ← ошибка
a?.b[1] ← ошибка
a?.b?.[1] ← undefined
6. ?? вместо ||
Хотелось бы упоминания, что это зовётся Nullish coalescing и ссылки на MDN
Многие почему-то используют для преобразования string в number функцию
parseInt()
, когда можно использовать только оператор+
А я знаю, почему:
s = '100s' // Предположим, это у нас transitionDuration
console.info(parseInt(s))
console.info(+s)
Если уж сравнивать, то с Number(s)
Для преобразования любого значения в Boolean нужно использовать двойной восклицательный знак !!
Не нужно, а можно. По-человечески это всё же Boolean(variable), а !! — это чуть-чуть из области минификации кода, примерно как if (a) run() заменять на a && run()
13. document.designMode
Если это упомянули (я ещё на IE использовал, если память не врёт), тогда нужно было написать и про contentEditable, который можно применять к отдельным тегам
Из приведенных примеров не видна разница между использованием операторов ~~
и |
. Выражения ниже приводят к одному результату.
20.8 | 0
~~20.8
array.length = 4;
Однажды я так сделал и в лисе и сафари на этом месте код падал. Это было давно и возможно сейчас это работает на всех движках, но я больше так не делаю никогда.
Не устаю повторять, что код должен быть в первую очередь читаемым, а не "коротким". Причём читаемым для тех кто нюансы языка знает слабо. Не ошибусь думаю, если скажу что многие ИТишники повседневно используют много больше одного языка, и вникать в "трюки" которые "укорачивают код", но не меняют функциональность кода по сути, весьма утомительно. Особенно нервируют п.2 и п.6
Возможности JS, о которых вы возможно не знали