2016-10-28 9 views
2

왜 JavaScript가 [] !== []입니까?왜 자바 스크립트에서 []! == []입니까?

나는 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness을 통해 읽었지만 설명 할 수있는 것이 없습니다.

편집 : this question 생각하지 않습니다 내의 정확한 복제본입니다. 그것은 미친 듯이 행동하는 == 연산자에 대해 묻습니다. 대답은 내 질문에 대한 대답이지만 같은 질문은 아닙니다.

+1

등가물이 아닌 동일한 개체 인 것을 비교합니다. – Ultimater

+1

나는 처음에는 똑같은 것을 생각했지만'[] == []'와'[] === []'는 모두 false를 반환합니다. – pulverize

+0

두 개의 변수가 동일한 객체를 참조하지 않는 한 목록은 실제로 객체이고 객체는 동일하지 않습니다. –

답변

4

두 인스턴스가 동일한 인스턴스인지 확인하기 위해 참조 리디렉션을 수행합니다. 두 개의 리터럴이 있다는 사실은 두 개의 개별 배열을 구성한다는 것을 의미하므로 참조 검사는 false를 반환합니다. 이 경우는 true를 반환합니다.

var a = [] 
var b = a 

//b === a 

이는 동일한 배열에 대해 두 개의 참조가 있기 때문입니다.

3

[]은 쓸 때마다 새로운 (빈) 배열을 만듭니다. 두 배열을 비교하는 중, 내용에 관계없이 포인터 (또는 참조)를 비교하고 있습니다.

var array = []; 
var anotherArray = array; // these two will point to the same array, so they are equal 


array === anotherArray; // true 
array === []; // false 


array.push('something'); 
anotherArray.length; // 1 
2

[]이 개체이기 때문에 비교의 양쪽이 정확히 동일한 개체를 가리키는 경우 개체 비교는 true를 반환합니다. 두 개의 개별 오브젝트를 작성하여 동일하지 않습니다.

var x = [] 
var y = x 
var z = [] 

x == x // true 
x == y // true 
x == z // false 
관련 문제