if([])
console.log(true);
else
console.log(false);
// 실행결과
true
조건문 내부에서의 빈 배열은 true로 취급한다.
빈 배열도 객체로 취급하는 Javascript의 특성 때문이다.
추가로 대표적인 Falsy 한 값은 다음과 같다.
이 외의 값들은 Truthy 한 값으로 취급한다.
false
null
undefined
0
NaN
''
console.log([] == true);
// 실행 결과
false
조건문에서의 빈 배열은 Truthy 한 값으로 취급한다고 했는데
비교 연산자에서는 falsy 한 값으로 취급된다.동등성 변환을 하기 때문인데
빈 배열을 동등성 변환을 하면''
로 변환된다.
''
는 위에서 언급한 것 처럼 Falsy한 값으로 취급하기 때문에
결과값이 false 로 나오게 된다.
console.log(Boolean([]) == true)
console.log(!![] == true)
// 결과값
true
true
빈 배열이 비교연산자에 도달하기 전에 명시적 타입 변환으로 미리 Truthy 한지 판단한다.
이렇게하면 빈배열이''
로 변환되는 것을 막을 수 있다.
의도적으로 == 를 사용하여 비교하는 경우는 잘 없긴 하나
만에 하나 실수를 할 경우도 있기 때문에 정리를 해둔다.