2016-06-17 3 views
0

이 문 :왜 그들은 동일하지 않습니까?

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

에 모두 해당 결과를 제공합니다. 하지만 :

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

이 거짓 결과를 나타냅니다. 왜?

+1

코드를 형식화하십시오. 현재 상태에서 읽는 것은 극히 어렵습니다. – Dbz

답변

1

첫 번째 경우와 마찬가지로 개별 요소를 비교하는 두 개의 배열을 비교하려고합니다. 그것이 결과가 다른 이유입니다.

배열의 개별 요소를 비교하고 두 배열을 비교하는 것은 동일하지 않습니다. 예를 들어이 자바 스크립트 함수를 확인 배열 평등 당신은 진정한 결과

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

를 사용하여이 함수를 호출

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; 
} 

지금. 나는 그것을 넣을 수 있습니다

+0

2 개의 어레이는 동일한 요소를 가지고 있지만 왜 다른가? –

+0

업데이트 된 답변을 확인하십시오. –

1

가장 간단한 방법은 다음과 같습니다

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

a === b // false 

배열은 자바 스크립트 객체입니다. 두 배열을 인스턴스화하면 서로 ===이 아닙니다. 그러나 요소별로 이동하고 동일한 요소가있는 경우 동일한 개체를 비교하기 때문에 동일합니다.

관련 문제