질문 : 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
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
CSS 파일을 다른 CSS 파일에 포함 시키는 방법 (0) | 2021.09.16 |
---|---|
JavaScript에서 문자를 ASCII 코드로 변환 (0) | 2021.09.16 |
AngularJS : Initialize service with asynchronous data (0) | 2021.09.16 |
CSS를 사용하여 체크박스 크기를 변경하는 방법 (0) | 2021.09.16 |
CSS Explosion 관리 (0) | 2021.09.15 |