2012-06-10 1 views
5

Есть ли какие-либо преимущества, кроме указания явного преобразования, использования двойного оператора в JavaScript? Кажется, что в эти дни людям нравится проверять наличие новых API-интерфейсов, используя двойной, но я никогда не читал никаких преимуществ.double not (!!) vs type coercion in JavaScript

if(!!window.File) 
    // The File API is supported. 
else 
    // Your browser sucks. 

Единственное, что я прочитал, что это краткий, неясный способ приведения типа к булеву, однако, при использовании в данном контексте объект будет автоматически принуждать булева любом случае, так как мы проверяем, чтобы см., если он определен.

Короче говоря, почему люди выполняют две булевы операции над двигателем?

+0

Как показано ссылкой, глобально сделать преобразование в логическое. Здесь он в основном предназначен для того, чтобы сделать код более удобочитаемым, а это значит, что требуется только логическое значение. –

+0

Я точно знаю, что такое !! псевдооператор, это не то, что я спросил. – Vreenak

+2

Нет никакого реального использования, это плохая привычка для чтения предлога. –

ответ

7

Я действительно не вижу причин для этого в контексте, как вы представляете. Это никак не повлияет на результат.

Единственный раз, когда я рассматриваю это как хорошую идею, - это если вы создаете функцию, которая должна возвращать значение bool, и вам нужно отбросить ее из другого значения, например ...

function isNotFalsy(val) { return !!val; } 

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

+0

Принято как можно лучше, хотелось бы указать @Pointy, что некоторые API могут ===/typeof запрашивать логические значения. – Vreenak

1

Вам не нужно использовать !! внутри выражения if.
Используется для преобразования значения в значение boolean, и if делает это по умолчанию.

var x = ""; // a falsy value 
!x // true 
!!x // false 

if (x) === if (!!x) 
+0

Спасибо за ответ, но я это знаю. Вопрос в том, есть ли какое-либо преимущество в использовании этого выражения в инструкции if, поскольку это такая распространенная практика. – Vreenak

+2

@watkinsj. Думаю, я ответил на этот вопрос в первой строке ... – gdoron

+0

Вы сказали, что это не нужно. Я указал на этот вопрос. Я не вижу никакого ответа относительно каких-либо преимуществ или объяснений его распространения в выражении if. – Vreenak