Mi sono imbattuto in una situazione in cui [] == []
è false
in Javascript.L'array vuoto non è uguale a se stesso in Javascript?
Qualcuno può spiegare perché?
Mi sono imbattuto in una situazione in cui [] == []
è false
in Javascript.L'array vuoto non è uguale a se stesso in Javascript?
Qualcuno può spiegare perché?
Poiché non sono lo stesso oggetto, oggetto diverso mai identico uguale, quindi il risultato è false
.
oggetti sono uguali per riferimento, []
è un oggetto nuovo, con un nuovo riferimento, la mano destra []
è anche un oggetto nuovo di zecca con un nuovo riferimento, in modo che non sono uguali, proprio come:
var user1 = new User();
var user2 = new User();
user1 === user2; // Never true
See Object identity perché entrambi gli array creano una nuova istanza di array, quindi il confronto tra due diversi oggetti non è uguale. Il tuo codice è equivalente a:
var arr1 = [],
arr2 = [];
arr1 == arr2; // false
Due valori letterali valutano sempre due istanze diverse, che non sono considerate uguali.
Io in realtà non riuscivo a trovare il codice per verificare se un oggetto è un array di lunghezza (ad esempio array vuoto) da nessuna parte, così l'ho scritto molto veloce se qualcuno vuole un secondo momento:
function isArrayOfLength(obj, length) {
var isArrayOfSpecifiedLength = false;
if(Array.isArray(obj)){
if(obj.length === length){
isArrayOfSpecifiedLength = true;
}
}
return isArrayOfSpecifiedLength;
}
E il test per esso:
(function(){
var isValidArray = isArrayOfLength([], 0);
console.log(isValidArray); //true
})();
(function(){
var isValidArray = isArrayOfLength([1,2,3], 0);
console.log(isValidArray); //false
})();
(function(){
var isValidArray = isArrayOfLength([1,2,3], 3);
console.log(isValidArray); //true
})();
(function(){
var isValidArray = isArrayOfLength({notAnArray:true}, 0);
console.log(isValidArray); //false
})();