우선, 사실 :
if (booleanValue)
포함 , 0이 아닌 숫자, 비어 있지 않은 문자열 값, 객체 또는 배열 참조 등의 if진실 된 값에 대한 진술을 충족시킵니다 .booleanValuetrue
반면에 :
if (booleanValue === true)
정확히 같으면 if조건 만 만족합니다 . 다른 어떤 진실한 가치도 그것을 만족시키지 못할 것입니다.booleanValuetrue
반면에 이렇게하면 :
if (someVar == true)
그런 다음 Javascript가 수행하는 작업은 유형 강제 변환 유형 true과 일치 someVar하고 두 변수를 비교하는 것입니다. 이것이 의도하지 않은 상황이 많이 있습니다. 이 때문에 대부분의 경우 ==Javascript가 두 가지 유형을 동일한 유형으로 강제 변환하는 방법에 대한 규칙이 상당히 길기 때문에 모든 규칙을 이해하고 JS 인터프리터가 수행 할 수있는 모든 것을 예상 할 수 없다면 두 개의 다른 유형 (대부분의 JS 개발자가 할 수없는)이 주어지면 ==완전히 피하고 싶을 것입니다 .
혼란스러운 예는 다음과 같습니다.
var x;
x = 0;
console.log(x == true); // false, as expected
console.log(x == false); // true as expected
x = 1;
console.log(x == true); // true, as expected
console.log(x == false); // false as expected
x = 2;
console.log(x == true); // false, ??
console.log(x == false); // false
가치를 위해 2, 당신은 그것이 2진실한 가치 라고 생각할 것입니다. 그래서 그것은 유리하게 비교할 true것이지만, 그것은 유형 강요가 작동하는 방식이 아닙니다. 그것은 왼손 값의 유형과 일치하도록 오른손 값을 변환 하므로 true숫자 로 변환 1하므로 2 == 1확실히 의도하지 않은 것을 비교 하고 있습니다.
따라서 구매자는주의해야합니다. ==비교할 유형을 명시 적으로 알고 가능한 모든 유형 강제 알고리즘이 어떻게 작동하는지 알지 않는 한 거의 모든 경우 에 피하는 것이 가장 좋습니다 .
따라서 실제로 예상되는 값 booleanValue과 코드 작동 방식에 따라 다릅니다 . 미리 true또는 false값만 가질 것이라는 것을 미리 알고 있다면 명시 적으로
if (booleanValue === true)
추가 코드이며 불필요하며
if (booleanValue)
더 작고 틀림없이 더 깨끗합니다.
반면에, 당신이 무엇을 알지 못하고 다른 자동 유형 변환이 허용되지 않는지 booleanValue실제로 테스트하려는 경우 true,
if (booleanValue === true)
좋은 생각 일뿐만 아니라 필수입니다.
예를 들어, .on()jQuery 에서 구현을 살펴보면 선택적 반환 값이 있습니다. 콜백이을 반환 false하면 jQuery는 자동으로 이벤트 전파를 중지합니다. 이 특정 경우, jQuery false는 반환 된 경우에만 전파를 중지하려고하기 === false때문에 반환 값 명시 적을 원하지 undefined않거나 0또는 ""자동으로 false로 유형 변환하여 비교를 만족시키는 다른 항목을 확인합니다.
예를 들어 jQuery 이벤트 처리 콜백 코드는 다음과 같습니다.
ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
jQuery가 명시 적으로 찾고 있음을 알 수 있습니다 ret === false.
그러나 jQuery 코드에는 코드의 요구에 따라 간단한 검사가 필요한 다른 곳도 많이 있습니다. 예를 들면 다음과 같습니다.
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
...