2016-07-24 15 views
0

habe ich eine Reihe von Tests für verschiedene Array-Werte:Ist ein leeres Array genau wie alles in JavaScript?

Tests:

x === 0 
x === '' 
x === false 
x === undefined 
x === NaN 
x === null 
x === [] 
x === {} 
x == 0 
x == '' 
x == false 
x == undefined 
x == NaN 
x == null 
x == [] 
x == {} 

Ergebnis:

wenn x entweder:

[NaN] 
[false] 

es scheitert alle Tests.

wenn x entweder ist:

[null] 
[] 
[[]] 
[[[yep, no matter how deep]]] 
[undefined] 
[''] 

läuft:

x==0 
x=='' 
x==false 

wenn x entweder:

[0] 
[{}] 

läuft

x==0 
x==false 

Fehle ich etwas? Gibt es etwas ein leeres Array [] streng gleich (===)?

Auch für diese Werte: [NaN],[false], [null], [], [[]], [undefined], [''], [0], [{}], nur [].length gleich 0

Was sind die besten Praktiken sind, wie zu überprüfen, ob ein Array [] leer ist? Wenn Best Practices konkurrieren, in welchen Situationen ist es am besten, sie zu verwenden?

+3

'Was sind die besten Praktiken, um zu überprüfen, ob ein Array leer ist ', wie wäre es mit' array.length == 0'? –

Antwort

6

Ein leeres Array ist ausschließlich nur sich selbst. Genauer gesagt ist ein Ausdruck, der eine Referenz auf ein bestimmtes leeres Array auswertet, nur genau gleich einem anderen Verweis auf dasselbe Array.

Das gilt für jede Art von Objekt, nicht nur für Arrays und nicht nur für leere Arrays. Es gibt keine integrierte Möglichkeit, ein eigenes spezielles Verhalten für Gleichheitsvergleiche mit === bereitzustellen.

Vergleiche mit == sind eine andere Geschichte wegen der Typumwandlungen, die implizit durchgeführt werden. Es ist jedoch immer noch wahr, dass Objektvergleiche auch mit == (das heißt, wenn keine Typkonvertierungen durchgeführt werden) der gleichen Regel folgen: Eine Referenz auf ein Objekt ist nur gleichbedeutend mit einer anderen Referenz auf dasselbe Objekt.

Beachten Sie auch, dass

[] === [] 

ist false denn das sind zwei verschiedene leere Arrays.In ähnlicher Weise

[1, 2] === [1, 2] 

ist false, wie

ist
{a: "hello"} === {a: "hello"} 

Jedes Array oder Objektinitialisierer Ausdruck ein einzigartiges Objekt erstellt, so dass, obwohl sie gleich aussehen , sie sind nicht gleich nach den Regeln von JavaScript === Vergleich.

+0

Danke für die klare und prägnante Antwort. Ich gehe mit 'emptyArray.length == 0', um dann nach Array-Leerheit zu suchen. – jpls93

Verwandte Themen