Javascript/WTF

[WTF JS] 3. true == [] 랑 true == ![] 같은 거 알고있지?

bugtype 2019. 11. 3. 13:31

 

 

// case 1
true == []; // -> false
true == ![]; // -> false

// case 2
false == []; // -> true
false == ![]; // -> true

 

왜 위처럼 나올까??? 어째서 같지???

여기서는 저번 설명에서 말한 것 처럼 JS에서는 빈배열은 숫자로 강제 변환하는 것을 이용해서 이해해야 한다.

2019/10/20 - [Javascript/WTF] - [WTF JS] 1. [] == ![] 는 true

 

그럼 이제 case 1을 먼저 보자

 

// case 1
1. true == []; // -> false
2. true == ![]; // -> false

==> 1
true == []; // Boolean, Array
true == 0; // Boolean, Number
1 == 0; // Number, Number
// false

==> 2
true == ![];  // Boolean, Boolean + Array
true == 0; // Boolean, Number
1 == 0; // Number, Number
// false

 

여기서 의문이 들것이다. 왜 [], ![] 둘다 false로 나오지 ?

위에서 사실 빠진 부분이 있다.  ![] 에서 []를 강제로 0인 Number으로 변환시키면 안되고 Boolean 형으로 변환 시켜야 한다.

case 1의 2번을 좀 더 자세히 풀어보도록 하자

 

==> 2
true == ![];  // Boolean, Boolean + Array
// 그 다음 빈배열을 숫자로 변환하는 것이 아니라 Boolean으로 변환시킨다. 앞에 !로 인해서 Boolean형으로 강제 변환 시킨다.
// ! + Boolean([]) 가 !true 로 변환된다.
true == !true;  // Boolean, Boolean + Boolean
true == false;  // Boolean, Boolean
true == 0; // Boolean, Number
1 == 0; // Number, Number

 

case2는 알아서 풀어보도록...!