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에서는 서로 타입을 같게해서 비교하기 때문에, 타입 변환이 일어난다.
'Javascript > WTF' 카테고리의 다른 글
[WTF JS] array 덧셈 ??? / [1,2,3] + [4,5,6] = ?? (0) | 2019.11.09 |
---|---|
[WTF JS] 3. true == [] 랑 true == ![] 같은 거 알고있지? (0) | 2019.11.03 |
[WTF JS] 2. '32' 숫자 변환은 + 오퍼레이터!! No parseInt, parseFloat (0) | 2019.11.02 |