2012-06-10 10 views
5

Czy istnieje jakaś korzyść, z wyjątkiem wskazania wyraźnej konwersji, na używanie podwójnego operatora nie w JavaScript? Wygląda na to, że obecnie ludzie lubią sprawdzać istnienie nowych API za pomocą podwójnego nie, ale nigdy, przenigdy nie czytałem żadnej z nich korzyści.Podwójny nie (!!) vs typ przymusu w JavaScript

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

Jedyną rzeczą, że przeczytałem to, że jest to zwięzły, niejasny sposób, aby wpisać obsady na Boolean jednak, gdy jest stosowany w tym kontekście celem będzie auto zmuszany do boolean anyways ponieważ sprawdzają się zobacz, czy jest on zdefiniowany.

Krótko mówiąc, dlaczego ludzie wykonują dwie operacje binarne nad silnikiem?

+0

Jak pokazuje link, globalnie dokonuje konwersji na wartość logiczną. Tutaj ma głównie na celu uczynienie kodu bardziej czytelnym, co oznacza, że ​​potrzebna jest tylko wartość boolowska. –

+0

Wiem dokładnie, co !! pseudooperator, to nie jest to, o co prosiłem. – Vreenak

+2

Nie ma prawdziwego zastosowania, to jest zły nawyk o pretekstowej czytelności. –

Odpowiedz

7

Nie widzę powodu, aby robić to w kontekście takim, jaki prezentujesz. Nie wpłynie to w żaden sposób na wynik.

Jedyna chwila, w której widzę to jako dobry pomysł, to jeśli tworzysz funkcję, która ma zwrócić wartość bool, i musisz rzucić ją z innej wartości, np. ...

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

Przykład może być trochę wymuszony, ale masz pomysł. Zawsze chciałbyś się upewnić, że zwracana wartość jest tego typu, jakiego oczekiwałby użytkownik.

+0

Zaakceptowany jako najlepszy, chciałbym wskazać @Pointy niektóre API mogą ===/typeof, aby wymagać wartości boolowskich. – Vreenak

1

Nie trzeba używać !! w wyrażeniu if.
Używane jest przekonwertowanie wartości na wartość logiczną, a if robi to domyślnie.

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

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

Dzięki za odpowiedź, ale ja to wiem. Pytanie brzmiało, czy istnieje jakaś korzyść z używania go w instrukcji if, ponieważ jest to tak powszechna praktyka. – Vreenak

+2

@watkinsj. Wierzę, że odpowiedziałem na to pytanie w pierwszej linii ... – gdoron

+0

Powiedziałeś, że to niepotrzebne. Wskazałem to w pytaniu. Nie widzę żadnej odpowiedzi, jeśli chodzi o jakiekolwiek zalety lub wyjaśnienia dotyczące proliferacji wewnątrz instrukcji if. – Vreenak

Powiązane problemy