Javascript/WTF

[WTF JS] 1. [] == ![] 는 true

bugtype 2019. 10. 20. 16:57

 

1. WTF

[] == ![] // true

왓더퍽!!! 왜 true가 나와

2. 이유

이 현상을 이해하기 위해서는 The abstract equality operator 에 대해서 알아야 한다.

       == 는 추상적인 비교를 하고 ===는 엄격한 비교를 한다고 보며 된다.

 

 

== 를 통해서 비교를 할때, JS에서는 서로 타입을 같게해서 비교한다. 

예) 1 == '1'  /  왼쪽은 숫자형, 오른쪽은 문자형이다. 서로 타입이 다르기에 JS는 서로 타입을 같게 만든다. 

 

어디 결과를 볼까?

 

1 == '1' // 왼쪽 타입: Number, 오른쪽 타입: string

1 == 1 // 왼쪽 타입: Number, 오른쪽 타입: Number

true // 비교

 

위에 같은 원리로 인해서 [] == ![] 는 true가 나오는 것이다.

 

그럼 어디 한번 풀어보자.

 

일단 JS는 내부적으로 빈배열일 경우 숫자로 강제 변환한다. 이것도 기억하자.

 

[] == ![] 는 true를 순서대로 풀어보자.

[] == ![] // Array, Boolean+Array

0 == ![] // Number, Boolean+Array

0 == false // Number, Boolean

0 == 0 // Number, Number

true

 

위에 같은 원리로 true가 나오는 것이다.

 

3. 기억해야 하는 점

1. JS 추상비교(==)에서 빈배열은 무조건 숫자로 강제 변환한다.  [] // 0

2. 앞에 ! 가 있으면 boolean 형태로 변환한다.

3. ==를 쓰지 말고 ===를 쓰자.

   - == 를 통해서 비교를 할때, JS에서는 서로 타입을 같게해서 비교하기 때문에, 타입 변환이 일어난다.