Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.11.2011, 07:31
Новичок на форуме
Отправить личное сообщение для De-Luxis Посмотреть профиль Найти все сообщения от De-Luxis
 
Регистрация: 30.05.2009
Сообщений: 8

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

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

Последний раз редактировалось De-Luxis, 25.11.2011 в 07:55.
Ответить с цитированием
  #2 (permalink)  
Старый 25.11.2011, 09:00
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

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

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

Последний раз редактировалось GuardCat, 25.11.2011 в 09:06.
Ответить с цитированием
  #3 (permalink)  
Старый 25.11.2011, 09:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

De-Luxis, ответ кроется в самом определении этого оператора
Цитата:
Возаращает false, если операнд может быть преобразован к true, в ином случае возвращает true.
Т.е. после первого применения ты получаешь (гарантировано) одно из двух значений false или true... Каков бы небыл операнд.
Ну а второе применение возвращает обратное true или false...
Ответить с цитированием
  #4 (permalink)  
Старый 25.11.2011, 09:07
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

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

val="test"
write ''val

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

val="125 test"
write ''val

Выдаст 1 (т.е. true)
Ответить с цитированием
  #5 (permalink)  
Старый 25.11.2011, 09:46
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

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

Последний раз редактировалось Skipp, 25.11.2011 в 09:51.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Два блока div разъезжаются при скроллинге окна браузера. call007 jQuery 0 03.04.2011 16:21
Конфликтуют два скрипта Aydar_nv Работа 2 27.01.2011 11:13
добавить два слоя одновременно rt2517 Events/DOM/Window 2 03.05.2010 13:38
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03
Два одинаковых сценария на одной странице Genetics Общие вопросы Javascript 7 12.07.2009 01:46