2008-10-23 2 views

답변

24

"두 피연산자의 유형과 값이 같은지 확인하려면 완전 항등 연산자 (===)를 사용하십시오. 값과 값에 대해서만 신경 쓰면 정규 항등 연산자 (==)를 사용하십시오. 유형이 중요하지 않습니다. 예를 들어 한 피연산자가 5이고 다른 피연산자가 문자열 "5"이면 표준 등가 연산자는 true를 반환하지만 동일한 유형이 아니기 때문에 완전 항등 연산자는 false를 반환합니다. " http://www.webreference.com/js/column26/stricteq.html

19

귀하의 행동에 따라 다릅니다.

! == 및 === 두 값 모두 유형을 비교하십시오.

5 == "5" 

위의 내용이 true를 반환합니다. 원하는 내용이 아닌 경우 다음을 수행하십시오.

5 === "5" 

false를 반환합니다.

3

피할 수있는 기본적인 이유는 ==!=이 엄격한 ===!== 연산자보다 비싸다는 것입니다. 다른 주요 문제로 인해 ==!=은 비교되는 두 값의 유형이 다른 경우 암시 적 toString 변환을 수행합니다.

일반의 예는

경고 ({toString : 함수() {반환 "1"} == 1)

이 사실 생산할 예정 - 의하여 toString 두 값에 호출됩니다로하고, 문자열 결과가 비교됩니다. 이 특별한 경우에 그것은 분명히 터무니 없지만 이것은 실제 사례에서도 마찬가지입니다.

+1

성능이 걱정거리입니다. 더 많은 것은 non-type-checking 버전에서 "false positive"의 가능성에 관한 것입니다. –

1

글쎄, 나는 당신이받은 "충고"는 아마도 의도 된 것이지만 실제로 완전한 발언은 아니라고 생각한다.

JavaScript는 동적으로 입력됩니다. 즉, 변수가 유형 (문자열, 숫자, 부울)을 캐스팅하지 않고 즉시 변경할 수 있음을 의미합니다. 파서가 이럴 경우 불평하지 않을 것입니다.

하지만 JavaScript가 완전히 잊혀지지 않는 것은 아닙니다. 평등 및 불평등 연산자 (== 및! =)는 평가 된 값을 비교하고 형식을 무시합니다.

엄격한 등가 연산자와 엄격한 비항 등 연산자 (=== 및! ==)는 형식에주의해야합니다. 따라서 반환 값을 결정하기 전에 값 AND 유형을 비교합니다. 자세한 내용은 여기

http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.5/guide/expr.html#1010037

+0

이것은 일반적인 오해입니다. 변수는 "변경 유형"이 아닙니다. 동적 언어 유형은 변수가 아닌 값의 속성입니다. 값에는 고정 유형이 있으며 변수에는 – Javier

+0

이 없습니다. Javier. 설명 주셔서 감사합니다! –

4

===와! == 연산자

읽기.

거의 항상 === 및! == 연산자를 사용하는 것이 좋습니다. == 및! = 연산자는 강제 변환을 수행합니다. 에서 특히 ==를 사용하여 을 위조 된 값과 비교하지 마십시오.

이에 대한 추가 정보를 원하시면 Douglas Crockford's Code Conventions for the JavaScript Programming Language

참조 Totty의 대답에서

, 또는 더 자세히 truthiness, falsiness 및 자바 스크립트 유형 강제 변환의 개념에 접근 Douglas Crockford's The Elements of JavaScript Style, part two: Idioms을 읽어 보시기 바랍니다.

3

===!==의 의미는 거의 항상 당신이 을 의미합니다.입니다. 한 프리미티브를 다른 프리미티브와 비교할 때는 동일한 값을 갖고 있는지 확인해야합니다. 하나의 객체를 다른 객체와 비교할 때 동일한 객체를 참조하는지 확인하려고합니다.

편집 : "허위"값 비교에 대한 잘못된 정보가 삭제되었습니다. == 연산자는 nullundefined 또는 0"" 또는 [0]0에서 구별 할 수 없다고 간단히 말할 것입니다. 예, 저는 그 마지막 것에 대해 진지합니다.

0

개인적으로 타인이 언급 한 타당한 타당한 이유 외에도, 나는 내가 뭘 비교하는지 정확히 알고 싶다. 나를 위해, 다음의 차이는 둘 다 !myVar로 평가에도 불구하고, 중요하다

false === myVar 
'undefined' === typeof myVar 
관련 문제