Iteam
GitHub

Behöver man skriva !! för att hantera en bool i Javascript?

Svaret är nej (i 99% av fallen)

Många använder !! för att konvertera om en sträng till en bool i if-satser men det är inte nödvändigt för Javascript hanterar bool convertering i sig självt. !! är egentligen ingen egen operator utan endast två ! efter varandra. Dvs !true är false och !!true är true. Dock är syntaxen väldigt svårtolkad och eftersom den är onödig rekommenderar jag inte att man använder den alls.

Dvs du behöver inte skriva:

if (!!user.password) return true;

det räcker med

if (user.password) return true;

Det finns dock ett fall där det är bra att konvertera en sträng till en bool och det är om du behöver skapa en ny variabel som innehåller en bool flagga:

var hasPassword = user.password;

alert(hasPassword) // skriver ut lösenordet

I detta fall skulle det vara önskvärt att byta till:

var hasPassword = !! user.password;

alert(hasPassword) // skriver true

Eller nästan ännu hellre vända på problemet

var hasEmptyPassword = ! user.password;

alert(!hasEmptyPassword) // skriver true

Eller:

var hasPassword = Boolean(user.password);

alert(!hasPassword) // skriver true

Läs fler reaktioner på detta:

http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript

Och tester på vilka värden som hanteras på vilket sätt med !!:

http://jibbering.com/faq/notes/type-conversion/

Christian Landgren
2011-12-01