Почему бы кто-то использовать такое выражениеЧто означает это выражение "!!"
if(!!window.JSON) alert('exists');
вместо просто
if(window.JSON) alert('exists');
?
Есть ли другое использование для "!!" вещь ?
Почему бы кто-то использовать такое выражениеЧто означает это выражение "!!"
if(!!window.JSON) alert('exists');
вместо просто
if(window.JSON) alert('exists');
?
Есть ли другое использование для "!!" вещь ?
! это логическое отрицание! это логическое отрицание, применяемое дважды, то есть логический идентификатор
Я бы предположил, что код, который вы читаете, просто безвреден (хотя и путающе) избыточным.
Да, но не вопрос включает в себя неявный тип-литье из объекта в boolean? –
!!
будет просто вызывать логическое преобразование, не нужно вообще, чтобы использовать эту конструкцию с if
заявления, а также в первом фрагменте, преобразование объекта, в логическое значение не имеет смысла, это будет всегда верно.
только значения, которые могут сподвигнуть к false
являются null
, undefined
, NaN
, 0
и пустая строка и конечно false
все остальное будет принуждать к true
.
Когда имеет смысл использовать !!
, когда вы хотите, чтобы убедиться, чтобы получить логический результат, например, при использовании логических &&
и ||
операторов.
Эти операторы могут возвращать значение операнда, а не логический результат, например:
true && "foo"; // "foo"
"foo" || "bar" ; // "foo"
Представьте у вас есть функция, что тестовые два значения, и вы ожидаете, логический результат:
function isFoo() {
return 0 && true;
}
isFoo(); // returns 0, here it makes sense to use !!
Edit: Глядя на ваши изменения, if (!!window.JSON)
просто лишними, как я уже говорил раньше, потому что if
statement само по себе сделает т он boolean conversion internally, когда вычисляется выражение условия.
Похоже, вы хотели написать что-то вроде 'function isFoo (obj) {return obj & & true;} isFoo (0);' в последнем примере :) или 'return !! obj & & true;' – Znarkus
'false &&" foo "' оценивает значение * false *. – Gumbo
@Gumbo: Да, была опечатка s/false/true, @ Znarkus, да, просто что-то для пояснительных целей;) Спасибо, ребята ... – CMS
Вероятно, они пытаются передать объект в логическое. Применяя к объекту логический оператор (!
), он становится bool, но на самом деле не хочет отрицания, поэтому они применяют второй для отмены первого.
// !! = boolean typecasting in javascript
var one = 1
var two = 2;
if (one==true) app.alert("one==true");
if (!!one==true) app.alert("!!one==true");
if (two==true) app.alert("two==true"); // won't produce any output
if (!!two==true) app.alert("!!two==true");
Вот почему вы должны использовать '===' и явно бросать:' = = 'правила преобразования типов - это что-то вроде WTF – Christoph
Его логическое преобразование, обеспечивающее преобразование в boolean в первый раз, а затем возврат к исходному значению.
Однако он используется неправильно здесь и будет только действительно актуально, если вы назначаете его в другую переменную - по соображениям производительности
var isJSON = (!!window.JSON);
if (isJSON) doX;
if (isJSON) doY;
if (isJSON) doZ;
несколько негативов, хотя понять, что вот почему. Если вы продолжаете использовать if (!! (!!) !!! (!) !! obj) в своем коде, только вы можете его поддерживать (если вам повезет) - я не безрассудно! – simendsjo
см. Http: // stackoverflow.com/questions/1406604/what-do-the-operator-double-exclamation-point-mean-in-javascript/1407769 # 1407769; и вы правы, в этом случае это избыточно, поскольку 'if()' уже преобразуется в boolean – Christoph