Как правильно менять тип переменной?

Учу основы JS по курсам 2012 года, дошел до такого момента где преобразовывают типы.
Услышал такую мысль что лучше всего преобразовывать такими конструкциями , потому что они работают быстрей:
!!5 //bolean
1 + "" //string
"1" * 1 //number

такой вообще правильно или нет?
Просто это жесть какой-то а не код получится ...
Кто-нибудь так делает вообще?
  • Вопрос задан
  • 465 просмотров
Пригласить эксперта
Ответы на вопрос 4
Stalker_RED
@Stalker_RED
Да, так делают, и довольно часто. Конструкция !! для приведения к boolean вообще чуть ли не стандарт. В jQuery встречается, например.

Вторая чуток пореже, и как правило, сперва ставят пустые кавычки, а потом уже переменную. Так:
var num = 12345;
var x = ("" + x)[3];
console.log(typeof x, x); // string 4


Третья еще реже, обычно просто ставится плюс перед переменной:
var y = +x * 10;
console.log(typeof x, typeof y, y); // string number 40


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

И да, это делают не для оптимизации, а потому что
Краткость - сестра
Ответ написан
Комментировать
@bIbI4k0
Питоню
В разных браузерах по-разному. Но обычно быстрее. Попробуйте сами:
var date_start = new Date(),
    b;
for (i = 0; i < 200000; i++) {
  b = !!i;
}
console.log((new Date()) - date_start);


vs

var date_start = new Date(),
    b;
for (i = 0; i < 200000; i++) {
  b = Boolean(i);
}
console.log((new Date()) - date_start);


Но лично я за принцип "Явное лучше неявного".
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
Конструкция !!5 для приведения к булеан разве что нужна, чтоб получить результат именно как boolean для каких-то там жутких вещей. Но тут есть нюанс, boolean нужен лишь для зрительного восприятия. На самом деле все true, что не равно нулю. null и undefined служат для других вещей, но приводятся в false. Надеюсь вы уловите мысль.
Ответ написан
@lem_prod
тут вопрос скорее предпочтения, и понятности кода, например у меня есть переменная с числом var a = 100; пускай, и мне ее надо преобразовать в строку, варианты использовать toString() или, как как я знаю что при сложении строки с числом, число преобразуется в строку сделать: "" + a
или если мне надо получить булево значение, я могу сделать !!a, но опять же,нужно понимать что происходит при этом.

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

как заключение скажу, если есть желание в дальнейшем осваивать ЯП общего назначения, где зачастую строгая типизация, стоит уделять внимание преобразованию типов и не сильно привыкать к гибкости, потом менять свое представление будет сложно, НО с другой стороны, если вы собираетесь работать со скриптовыми языками, в частности в вебе, то конечно же надо понимать как они себя ведут и хорошо разобраться с преобразованием типов в разных ситуациях.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы