2016-06-17 15 views
0

Diese Aussage:Warum sind sie nicht gleich?

[].slice.call(document.getElementsByTagName("div")).forEach(function (item,index){console.log (item===[].slice.call(document.querySelectorAll("div"))[index])}); 

gibt alle wahren Ergebnisse. aber :

[].slice.call(document.getElementsByTagName("div"))===[].slice.call(document.querySelectorAll("div")); 

gibt falsches Ergebnis. Warum?

+1

Bitte formatieren Sie Ihren Code. Es ist extrem schwierig, in seinem aktuellen Zustand zu lesen – Dbz

Antwort

1

Im zweiten Fall versuchen Sie zwei Arrays miteinander zu vergleichen. Im ersten Fall vergleichen Sie einzelne Elemente. Deshalb sind die Ergebnisse unterschiedlich.

Vergleichen der einzelnen Elemente des Arrays und Vergleich zweier Arrays sind nicht gleich. Zum Beispiel dieser Javascript-Funktion prüft Array Gleichheit

function arraysEqual(a, b) { 
    if (a === b) return true; 
    if (a == null || b == null) return false; 
    if (a.length != b.length) return false; 

    // If you don't care about the order of the elements inside 
    // the array, you should sort both arrays here. 

    for (var i = 0; i < a.length; ++i) { 
    if (a[i] !== b[i]) return false; 
    } 
    return true; 
} 

und jetzt, wenn Sie diese Funktion

arraysEqual([].slice.call(document.getElementsByTagName("div")), [].slice.call(document.querySelectorAll("div"))) 

mit aufrufen, die in echten führt.

+0

Die 2 Arrays haben die gleichen Elemente, aber warum sind sie unterschiedlich? –

+0

Bitte überprüfen Sie meine aktualisierte Antwort. –

1

Der einfachste Weg, ich es kann, ist:

var a = []; 
var b = []; 

a === b // false 

Arrays Objekte in Javascript sind. Wenn Sie zwei Arrays instanziieren, sind sie nicht === miteinander. Wenn Sie jedoch Element für Element gehen und dieselben Elemente haben, dann sind sie ja gleich, weil Sie dasselbe Objekt vergleichen.

Verwandte Themen