2013-07-10 4 views
5

이 JavaScript Array 부등식 비교가 true로 평가되는 이유를 누구나 설명 할 수 있습니까?배열 평등/부등식

[""] !== [""] 

[1] !== [1] 

[] !== [] 


[""] != [""] 

[1] != [1] 

[] != [] 
+2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators –

+0

@GeorgeCummins 글쎄, 대부분의 언어에서 동일합니다. –

+1

myHouse와 yourHouse는 모두 집이지만 myHouse입니다. == yourHouse -> true – Xotic750

답변

8

===엄격한 평등이다.
개체를 비교할 때 양측이 동일한 개체를 참조하는 경우에만 true를 반환합니다.

[][]은 두 개의 다른 객체이지만 같음을 반환합니다.


==은 평등합니다.

spec에 설명 된 것처럼 두 피연산자를 동일한 유형으로 강제 변환하려고 시도합니다.

그러나 개체도 참조 신원으로 비교합니다.

+0

문자열 리터럴을 비교하면 true ("a"=== "a")가되지만 String 객체를 비교하면 false가 반환됩니다. new String ("a ") === 새로운 문자열 ("a "). 따라서 문자열 리터럴은 객체로 취급되지 않으며 Java 언어와 유사한 방식으로 '인턴하기'로 결론지었습니다. –

+1

@normc : 아니요. 자바와 달리 Javascript에는 숫자와 마찬가지로 _primitive_ 유형의 문자열이 있습니다. 'new String ("a")'는 그것을 객체에 넣습니다. 예를 들어'var a = "a"; a.b = 2; 경고 (a.b); // undefined' – SLaks

+0

@normc : 박스형 문자열 객체는 거의 사용되지 않습니다. 모든 문자열 연산은 프리미티브를 반환합니다. – SLaks