2010-08-04 3 views
1

В чем разница if("test") и if(!!"test"), только судимо ложно или верно;В чем разница, если («тест») и если (!! «тест»)

+0

Я думаю, что я уже видел такой вопрос, но я не могу вспомнить тему –

+1

тема вашего вопроса отличается от тела – 2010-08-04 10:42:45

+0

@ tm1rbrt: я исправил его, первый редактор отредактировал его неправильно. – BoltClock

ответ

1

!! делает преобразование типа в логическое, где вы просто отбрасываете его в if, это AFAIK, бессмысленно.

6

Вопрос имеет double negation expressson, который преобразует тип в boolean.

например.

var x = "test"; 

x === true; // evaluates to false 

var x = !!"test"; 

x === true; //evalutes to true 
6

!! преобразует «истинное» значение в true, а значение «false» - false.

значения "Falsy" являются следующие:

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

Если какая-либо переменная x имеет любую из них, то !!x вернет false. В противном случае !!x вернет true.

С практической стороны нет никакой разницы между выполнением if(x) и выполнением if(!!x), по крайней мере, не в javascript: оба будут вводить/выходить из if в тех же случаях.

EDIT: Смотрите http://www.sitepoint.com/blogs/2009/07/01/javascript-truthy-falsy/ для получения дополнительной информации

1

Там нет функциональной разницы. Как отмечают другие,

!!"test" 

преобразовывается в строку в булево.

Думай об этом, как это:

!(!("test")) 

Во-первых, "test" оценивается как строка. Затем оценивается !"test". Поскольку ! является оператором отрицания, он преобразует вашу строку в логическую. Во многих языках сценариев непустые строки оцениваются как истинные, поэтому ! изменяет его на false. Затем оценивается !(!"test"), изменяя значение false на true.

Но !!, как правило, не требуется в условии if, как я уже упоминал, что он уже выполняет преобразование для вас, прежде чем проверять логическое значение. То есть обе эти линии:

if ("test") 
if (!!"test") 

функционально эквивалентны.

+0

спасибо за ответ, если (!! "var ») широко используется в Ext lib; Я думаю, что если ("var") равно if (!! "var"); – user410648

Смежные вопросы