Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Два восклицательных знака (https://javascript.ru/forum/misc/23482-dva-vosklicatelnykh-znaka.html)

De-Luxis 25.11.2011 07:31

Два восклицательных знака
 
После статьи на хабре про суп, задался вопросом.
Что значит два восклицательных знака?
Это только для приведения к логическому типу?

if (false == !!event) event = window.event;

GuardCat 25.11.2011 09:00

Действительно интересный ход мыслей. Если у автора кода было желание использовать принудительное приведение типов (хотя, в таком случае, зачем ==, а не === ?), допустимо было бы использовать просто
if (!event) event = window.event;
. Или чем плох вариант
event = event || window.event;
?

Из стёба в комментах к статье:
Цитата:

Можно было для верности ещё написать так:
if (/^false$/i.test((!!event).toString()))


ksa 25.11.2011 09:03

De-Luxis, ответ кроется в самом определении этого оператора
Цитата:

Возаращает false, если операнд может быть преобразован к true, в ином случае возвращает true.
Т.е. после первого применения ты получаешь (гарантировано) одно из двух значений false или true... Каков бы небыл операнд.
Ну а второе применение возвращает обратное true или false...

ksa 25.11.2011 09:07

GuardCat, например у нас в Cache true = 1, а false = 0... И бывает нужно использовать именно такие значения... Ну мало ли для чего...
Примеры:

val="test"
write ''val

Выдаст 0 (т.е. false)

val="125 test"
write ''val

Выдаст 1 (т.е. true)

Skipp 25.11.2011 09:46

Может так понятнее будет:
var str = '0';
alert(typeof str);
alert(Boolean(str));
alert('0' === false);
alert(typeof !str);
alert(!str);
alert(typeof !!str);
alert(!!str);


Часовой пояс GMT +3, время: 08:11.