Q. 알고리즘 문제를 푸는데 본인은 항상 "===" 을 사용했는데 한 문제에서 다른 사람들의 코드를 보니 "==" 을 사용된 것을 보고 두 문자의 차이가 궁금해짐
== 연산자
- == 연산자는 두 피연산자의 값의 타입이 다를 경우 자동으로 일부 피연산자의 타입을 변환 후 값을 비교
- 타입을 비교하지 않으므로 ===연산자에 비해 느슨함
123 == 123 // true
123 == '123'
// true, 문자열을 숫자로 변환 후 값을 비교
true == 1
// true, 두 피연산자에서 불리언 값이 존재하면, 불리언 값을 1로 변환 후 값을 비교
true == '1'
// true, 불리언 값을 1로 변환 후 문자열 '1'을 숫자로 변환 후 값 비교
true == 'true'
// false, 불리언 값을 1로 변환하면 1 == 'true'
null == undefined
// true, null과 undefined는 엄연히 다르지만, == 연산자는 true를 반환
=== 연산자
- === 연산자는 타입을 변환하지 않으므로 비교하는 방식이 엄격
- 즉, 타입이 다르면 false를 반환
123 == 123 // true
123 == '123' // false
true === 1 // false
true === 'true' // false
null === undefined // false
NaN === NaN // false
- NaN값은 자기자신을 포함하여 어떠한 값과도 일치하지 않음
- ===연산자에 NaN값이 존재하는 경우 항상 false
- 정확한 문자열을 비교하기 위해서는 localeCompare 메서드를 사용하는 것이 좋음
- 문자열은 눈으로 보았을 때 동일하더라도 인코딩 방식이 다르게 되어있을 수 있기 때문
- 가급적으로 ==보다 ===를 쓰는 것이 좋다
- 타입을 신경 쓰지 않고 비교를 하게 되는 ==는 원하지 않는 값 체크가 발생해도 판별하기가 어려움
- 확실한 비교가 보장되는 === 를 쓰는 것을 권장함.
'JS' 카테고리의 다른 글
[JS] 배열의 순서 (sort()메서드, reverse() 메서드) (0) | 2023.02.03 |
---|---|
[JS]BigInt (0) | 2023.01.31 |
[JS] 배열 특정 값 포함 여부(includes, indexOf, some, every) (0) | 2023.01.17 |
[JS] 배열에서 특정 값의 개수 구하기 (0) | 2023.01.17 |
[JS] Templete Literal : 백틱(``), 달러(${}) (0) | 2023.01.16 |