후레임의 프로그래밍
JavaScript 비교에서 ==와 ===의 차이는 무엇일까요? 본문
질문
JSLint 를 사용하여 JavaScript를 통과 하고 있으며 문 내부에서 비교하는 것과 같은 작업을 수행 할 때 ( ==등호 2 개)를 ===(등호 3 개 ) 로 대체하라는 많은 제안을 반환 합니다.
만약
idSele_UNVEHtype.value.length == if
여기서==
를 ===
로 바꾸면 성능상의 이점이 있습니까?
많은 비교 연산자가 존재하므로 성능 향상을 환영합니다.
유형 변환이 발생하지 않으면 ==
보다 성능이 향상됩니까?
답변
strict 등호 연산자(===
)는 유형 변환이 수행되지 않는 점을 제외하고는 추상 항등 연산자 (==
)와 동일하게 작동하며 유형은 동일하다고 간주됩니다.
참조 : 자바 스크립트 자습서 : 비교 연산자
==
연산자는 필요한 유형 변환을 수행 한 후같은지 비교합니다. ===
연산자는 변환을 수행하지 않습니다. 따라서 두 값이 동일한 유형이 아닌 경우 ===
는 단순히 를 반환합니다. 거짓
. 둘 다 똑같이 빠릅니다.
Douglas Crockford의 뛰어난 자바 스크립트 : 좋은 부분을 인용하려면</p >
자바 스크립트에는
===
및! ==
, 그리고 악의적인 쌍둥이==
및의 두 가지 동등 연산자 세트가 있습니다. ! =
. 좋은 것들은 예상대로 작동합니다. 두 피연산자의 유형이 같고 값이 같으면===
는true
를 생성하고! ==
는를 생성합니다. 거짓
. 사악한 쌍둥이는 피연산자가 같은 유형일 때 옳은 일을 하지만, 유형이 다른 경우 값을 강요하려고합니다. 그들이하는 규칙은 복잡하고 기억에 남지 않습니다. 다음은 몇 가지 흥미로운 사례입니다.'' == '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가 좋은 지적을했습니다. stackoverflow.com/users/113570/philippe-leybaert">@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
생성자를 사용하여 문자열 리터럴에서 문자열 객체를 만들지 않는 것입니다.
Reference
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
'스택오버플로우(Stack Overflow)' 카테고리의 다른 글
REST의 PUT vs POST (0) | 2020.10.26 |
---|---|
Linux에서 특정 텍스트가 포함 된 모든 파일을 찾으려면 어떻게합니까? (0) | 2020.10.26 |
비동기 호출에서 응답을 어떻게 반환합니까? (0) | 2020.10.26 |
추적되었지만 현재 .gitignore에 있는 파일을 Git이 "잊게"만드는 방법은 무엇입니까? (0) | 2020.10.26 |
파일이 예외없이 존재하는지 어떻게 확인합니까? (0) | 2020.10.26 |