우선, 사실 :
if (booleanValue)
포함 , 0이 아닌 숫자, 비어 있지 않은 문자열 값, 객체 또는 배열 참조 등의 if
진실 된 값에 대한 진술을 충족시킵니다 .booleanValue
true
반면에 :
if (booleanValue === true)
정확히 같으면 if
조건 만 만족합니다 . 다른 어떤 진실한 가치도 그것을 만족시키지 못할 것입니다.booleanValue
true
반면에 이렇게하면 :
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;
}
...