프로그래밍 언어/HTML,CSS,JS

JavaScript 비교 연산자 (== vs ===)의 차이

Rateye 2021. 9. 16. 11:56
728x90
반응형
질문 : JavaScript 비교에서 사용해야하는 같음 연산자 (== vs ===)는 무엇입니까?

나는 JSLint 를 사용하여 JavaScript를 통과하고 있으며 if 내부에서 idSele_UNVEHtype.value.length == 0 == (등호 2 개)를 === (등호 3 개)로 바꾸라는 많은 제안을 반환 if 성명서.

===== 로 바꾸면 성능상의 이점이 있습니까?

많은 비교 연산자가 존재하므로 성능 향상을 환영합니다.

유형 변환이 발생하지 않으면 == 보다 성능이 향상됩니까?

답변

완전 항등 연산자 ( === )는 유형 변환이 수행되지 않는다는 점을 제외하고 == )와 동일하게 작동하며 동일한 것으로 간주 되려면 유형이 동일해야합니다.

참조 : 자바 스크립트 튜토리얼 : 비교 연산자

== 연산자는 필요한 유형 변환을 수행 한 후 동등성을 비교합니다. === 연산자는 두 값이 동일한 유형되지 않도록 경우, 변환을하지 않을 === 단순히 반환합니다 false . 둘 다 똑같이 빠릅니다.

Douglas Crockford의 뛰어난 JavaScript : The Good Parts 를 인용하려면,

===!== 및 악의적 인 쌍둥이 ==!= 두 가지 등식 연산자 세트가 있습니다. 좋은 것들은 예상대로 작동합니다. 두 피연산자가 동일한 유형이고 동일한 값을 갖는 경우 ===true 생성하고 !== false 생성합니다. 사악한 쌍둥이는 피연산자가 같은 유형일 때 옳은 일을하지만, 유형이 다른 경우 값을 강요하려고합니다. 그들이하는 규칙은 복잡하고 기억에 남지 않습니다. 흥미로운 경우는 다음과 같습니다.

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r\n ' == 0     // true

평등 비교표

전이성의 부족은 놀랍습니다. 나의 충고는 결코 사악한 쌍둥이를 사용하지 말라는 것입니다. 대신 항상 ===!== . 방금 표시된 모든 비교 === 연산자를 사용하여 false

@Casebash 가 댓글과 @Phillipe Laybaert의 객체 관련 답변 에서 좋은 점을 제기했습니다. 객체의 경우 ===== 서로 일관되게 작동합니다 (특별한 경우 제외).

var a = [1,2,3];
var b = [1,2,3];

var c = { x: 1, y: 2 };
var d = { x: 1, y: 2 };

var e = "text";
var f = "te" + "xt";

a == b            // false
a === b           // false

c == d            // false
c === d           // false

e == f            // true
e === f           // true

toString 또는 valueOf 메소드로 인해 동일한 프리미티브로 평가되는 객체와 프리미티브를 비교할 때입니다. String 생성자를 사용하여 생성 된 문자열 객체와 문자열 프리미티브를 비교해보십시오.

"abc" == new String("abc")    // true
"abc" === new String("abc")   // false

여기서 == 연산자는 두 객체의 값을 확인하고 true 반환하지만 === 는 두 객체가 동일한 유형이 아니라는 것을 확인하고 false 반환합니다. 어느 것이 맞습니까? 그것은 당신이 비교하려는 것에 달려 있습니다. 내 조언은 질문을 완전히 우회하고 String 생성자를 사용하여 문자열 리터럴에서 문자열 객체를 생성하지 않는 것입니다.

참고
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

출처 : https://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons
728x90
반응형