!!foo
дважды применяет унарный оператор и используется для приведения к логическому типу, аналогичного использованию унарного плюса +foo
, для приведения в число и конкатенации пустой строки ''+foo
для перевода в строку.
Вместо этих хаков вы также можете использовать функции-конструкторы, соответствующие примитивным типам ( без , используя new
), чтобы явно приводить значения, т. е.
Boolean(foo) === !!foo
Number(foo) === +foo
String(foo) === ''+foo