Mijn favoriet is het gebruik van !!
. Het is ook de aanbevolen methode in de JavaScript-stijlgids van Airbnb 👍
Boolean(value);!!value;
# Waarden omzetten naar Booleaans
# String
const string = 'string';!!string; // trueBoolean(string); // true
# Getal
const number = 100;!!number; // trueBoolean(number); // true
# Falsy-waarden
In JavaScript, zijn er 6 falsy waarden. Als je een van deze omzet in een boolean
, levert dat false
op.
falseundefinednullNaN0"" (empty string)
Alles wat niet op de falsy-lijst staat, zal true
👍
Meer informatie over dit, kunt u mijn Code Notes on Falsy Values lezen
# Examples
Toepassing van !!
op falsy waarden
!!false; // false!!undefined; // false!!null; // false!!NaN; // false!!0; // false!!''; // false
Toepassing van Boolean
op falsy waardes
Boolean(false); // falseBoolean(undefined); // falseBoolean(null); // falseBoolean(NaN); // falseBoolean(0); // falseBoolean(''); // false
# Hoe de !! werkt
De eerste !
coerceert de waarde naar een boolean en inverseert deze. In dit geval, !value
zal false
teruggeven. Dus om het terug te draaien naar true
, zetten we er nog een !
op. Vandaar het dubbele gebruik !!
.
const value = 'string';!value; // false!!value; // true
# Pas op voor ‘false’
const value = 'false';!!value; // trueBoolean(value); // true
Merk op dat de "false"
tussen aanhalingstekens staat '
. Hoewel er false
staat, is het eigenlijk een string. Ik weet dat de meesten van jullie hier niet in zullen trappen, maar als je net als ik bent, wil je misschien gewoon alert zijn op deze grappige hersenspinsels die mensen met je uithalen 😂
# Community Input
@tassoevan : Ik vind het leuk om valse waarden uit arrays als deze te filteren: myArray.filter(Boolean)
@fleonus : Ik hou van !+!
gewoon om cool te zijn en mensen op het verkeerde been te zetten 😛
# Speed Test
Hier is een test die ik vond:
boolean vs !!!
Het lijkt erop dat de !!
iets sneller is dan Boolean
#Welke te gebruiken?
Ik heb veel commentaar gekregen op deze post. Sommige mensen geven de voorkeur aan de Boolean
omdat die explicieter is.
Maar, Kyle Simpson van You Don’t Know JS, zei dat beide explicieter zijn.
// better (works explicitly):if (!!a) {}// also great (works explicitly):if (Boolean(a)) {}
Kyle Simpson: YDKJS – Coercion
Ik denk niet dat ik een goed antwoord voor je heb. Jij kent je team veel beter dan ik. Ik zal !!
blijven gebruiken in mijn eigen persoonlijke projecten, omdat het minder typewerk is en ik deze syntaxis begrijp. Maar als ik in een team zat, zou ik misschien Boolean
kiezen, omdat ik denk dat de meeste ontwikkelaars dat beter zouden begrijpen. Welke je ook kiest, het belangrijkste is om consistent te zijn. Ga niet heen en weer springen tussen de twee in je code base. Kies er een en blijf daarbij 💪
Aanvulling op een geweldige opmerking die ik kreeg:
@patrick_developer: Ik vind dat je beide moet begrijpen voor het geval je met verschillende code bases wordt geconfronteerd die elk van beide gebruiken. Kennis is macht.
Met andere woorden, de een is niet beter dan de ander. Ik zou zeggen dat dit meer een voorkeur is. Dus je kunt niet fout gaan. Maar ontzeg jezelf niet het begrijpen van beide. Zoals Patrick zei: “Kennis is macht” 💪
# Vermijd nieuwe Boolean
Gebruik Primitives in plaats van Object Types
var str = 'str';// Avoidtypeof new Boolean(str); // object// Preferredtypeof Boolean(str); // booleantypeof !!str; // boolean
CJ J.: Het is de moeite waard om op te merken dat new Boolean
geen boolean is, maar eerder een instantie van Boolean. Primitieven zijn goedkoper en verdienen de voorkeur boven het objecttype.
CJ J.: new Boolean(str)
retourneert een objecttype. Boolean(str)
retourneert gewoon een primitieve boolean. Ik zou vermoeden dat Boolean(str)
sneller is dan !!str
omdat het maar één bewerking is, maar het is ook heel goed mogelijk dat browsers een optimalisatie implementeren zodat wanneer ze !!
zien, ze weten dat ze het argument direct moeten casten naar een booleaanse primitieve (in plaats van NOT()
twee keer achter elkaar te doen).
CJ J.: Primitieven zijn goedkoop omdat ze onveranderlijk zijn, zodat je referenties kunt delen en geen status op de instantie hoeft te houden. Het is gewoon true
of false
. Maar new Boolean(str)
is een object. Het heeft zijn eigen unieke geheugenadres en het kan een interne staat bevatten die uniek is voor het. Dit betekent dat het niet alleen een verwijzing kan bevatten naar een onveranderlijke singleton instantie. Elke oproep aan new Boolean(str)
installeert een geheel nieuw Boolean()
object.
Dank je: CJ J .
# Verwijder lege strings met Boolean Constructor
CJ J.: Dit is het klassieke voorbeeld. Als je een lijst met tekenreeksen krijgt, gescheiden door komma’s, en je wilt de lege tekenreeksen eruit filteren, dan kun je de Boolean constructor functie doorgeven aan Array.prototype.filter en deze zal automatisch de tekenreeksen met een lengte van nul eruit halen, zodat er een array overblijft met alleen geldige tekenreeksen.
var str = 'some,list,,of,values';var arr = str.split(',');arr; // arr.filter(Boolean); //
Dank je: CJ J .