Wat'is de beste manier om te controleren of een array leeg is of'niet bestaat?
Zoiets als dit?
if(array.length < 1 || array == undefined){
//empty
}
Je wilt eerst controleren op undefined
. Als je het andersom doet, zal het een fout genereren als de array undefined is.
if (array === undefined || array.length == 0) {
// array empty or does not exist
}
Dit antwoord krijgt redelijk wat aandacht, dus ik'wil erop wijzen dat mijn oorspronkelijke antwoord, meer dan iets anders, de verkeerde volgorde van de voorwaarden behandelde die in de vraag worden geëvalueerd. In die zin gaat het voorbij aan verschillende scenario's, zoals null
waarden, andere soorten objecten met een length
eigenschap, enz. Het is ook niet erg idiomatisch JavaScript.
De onfeilbare aanpak
Met wat inspiratie uit de commentaren, is hieronder wat ik momenteel beschouw als de foolproof manier om te controleren of een array leeg is of niet bestaat. Het houdt er ook rekening mee dat de variabele misschien niet verwijst naar een array, maar naar een ander type object met een length
eigenschap.
if (!Array.isArray(array) || !array.length) {
// array does not exist, is not an array, or is empty
// ⇒ do not attempt to process array
}
Om het uit te splitsen:
Array.isArray()
controleert, niet verrassend, of zijn argument een array is. Dit verwijdert waarden als null
, undefined
en al het andere dat geen array is.
Merk op dat dit ook array-achtige objecten elimineert, zoals het arguments
object en DOM NodeList
objecten. Afhankelijk van je situatie, is dit misschien niet het gedrag waar je naar op zoek bent.
De array.length
voorwaarde controleert of de variabele's length
eigenschap evalueert naar een truthy waarde. Omdat de vorige voorwaarde al vaststelde dat we inderdaad met een array te maken hebben, zijn meer strikte vergelijkingen zoals array.length != 0
of array.length !== 0
hier niet nodig.
De pragmatische aanpak In veel gevallen lijkt het bovenstaande misschien overkill. Misschien gebruik je een taal van hogere orde zoals TypeScript die het grootste deel van de type-controle voor je doet tijdens het compileren, of het kan je echt niet schelen of het object daadwerkelijk een array is, of alleen maar array-achtig.
In die gevallen neig ik naar het volgende, meer idiomatische JavaScript:
if (!array || !array.length) {
// array or array.length are falsy
// ⇒ do not attempt to process array
}
Of, wat vaker voorkomt, het omgekeerde:
if (array && array.length) {
// array and array.length are truthy
// ⇒ probably OK to process array
}