2013-11-06 4 views
1

Я часто вижу код, который использует !!condition в отличие от обычного состояния. Т.е .:В чем разница между if (!! condition) и if (condition)

if(!!value){ 
    doSomething(); 
} 

против:

if(value){ 
    doSomething(); 
} 

Что такое funcational разница, если есть один? Один превосходит другого? Что, если таковые имеются, являются условиями для выбора одного или другого?

+0

Возможный дубликат [Может кто-нибудь объяснить этот «двойной отрицательный» трюк?] (Http://stackoverflow.com/questions/4686583/can-someone-explain-this-double-negative-trick) –

+0

См. Также [How использовать оператор double not (!!) в javascript] (http://stackoverflow.com/q/2174297/1048572) – Bergi

+0

@JonathanNaguin: Нет, это не так. – Bergi

ответ

7

Технически ничего.Двойной взлом !! тип конвертирует value в логическое - что-то делает оператор if, когда он оценивает value в любом случае.

В коде, который вы опубликовали, !! бесполезен и не имеет никакой цели.

1

The !! гарантирует, что результирующий тип является логическим (true или false).

JavaScript: предупреждение ("Foo") -> Foo

JavaScript: предупреждение -> ложь

Javascript ("Foo"!): Предупреждение (!! "Foo") -> правда

JavaScript: предупреждение (!! нуль) -> ложь

Они делают это, чтобы убедиться, что $ ('строка') не является нулевым.

Это короче, чем $ ('row')! = Null? true: false.

6

Это просто более явный способ проверить «правдивость» значения.

Следующие «литые» value для булевых.

!!(value) 

Например, непустая строка

!!"a" // true 

Другой пример с пустой строкой

!!"" // false 

Однако, если вы просто проверить значение непосредственно с помощью

if (value) // ... 

то следующие значения false в JavaScript

  • 0
  • -0
  • null
  • "" (пустая строка)
  • false
  • undefined
  • NaN

все остальное не true

+0

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