-
[JavaScript] 동등연산자와 일치연산자Javascript 2022. 3. 18. 17:36
어제 면접을 보고 질문에서 동등연산자와 일치연산자 관련된 질문을 받았다. 이게 어떤건지는 아는데 뭔가 설명이 부족한 느낌이 들어서 정리를 해보면서 좀 더 자세하게 알아보려고한다.
동등연산자
"=="와 같이 =가 2개 있는 것으로 영어로는 Equality operator라고 한다.
동등연산자로 피연산자를 비교할 때는 JavaScript 엔진에 의해서 암묵적인 타입 변환이 먼저 이루어지는데, 좌항과 우항이 타입이 다르더라도 값이 같으면 true로 반환한다.
const a = 1 const b = '1' console.log(a == b) //true
동등연산자를 사용하면 타입을 변환하여 비교하는 과정에서 의도치 않게 동작해서 위와 같은 결과값을 출력해낸다.
하지만 null을 체크할때는 동등연산자를 유용하게 사용할 수 가 있다. 동등연산자는 null과 undefined 두 값을 동일하게 취급하며 두 값을 제외한 다른 값들에 대해서는 항상 false를 반환한다.
동등연산자 평가 알고리즘은
- 피연산자의 유형이 동일한 경우 IEA를 사용해서 완전히 동일한지 테스트를 한다. 완전히 같지 않으면 같지 않고, 그렇지 않으면 같다.
- 피연산자의 유형이 다른 경우
- 한 피연산자가 null이고, 다른 피연산자가 undefined인 경우 동일하다.
- 한 피연산자가 숫자이고 다른 피연산자가 문자열이면 문자열을 숫자로 반환하며, 비교를 다시 시도한다.
- 피연산자가 Boolean이면 true를 1로, false를 0으로 반환한다. 그리고 나서 비교를 다시 시도한다.
- 한 피연산자가 객체이고 다른 피연산자가 숫자 혹은 문자열이면 OPCA를 사용해서 객체를 기본 형식으로 반환한다. 그리고 나서 비교를 다시 시도한다.
- 다른 모든 경우에는 피연산자가 같지 않다.
일치연산자
"==="와 같이 =가 3가 있는 것으로 영어로는 identity operator라고 한다.
일치연산자는 좌항과 우항의 피연산자가 값과 타입이 모두 같을 경우에만 true를 반환한다.
const a = 1 const b = 1 const c = '1' console.log(a === b) // true console.log(a === c) // false
하지만 다음과 같이 NaN과 0의 경우에는 다르게 동작한다. 유효하지 않은 숫자를 나타내는 값인 NaN은 자신과 일치하지 않는 유일한 값이기 때문에 일치 연산자로 비교해도 false가 반환이 된다. 따라서 NaN 여부를 판별하기 위해서는 isNaN() 내장 함수를 사용해야 한다.
console.log(NaN === NaN) // false console.log(isNaN(NaN)) // true console.log(0 === -0) // true
또한 0과 -0은 다른 값이지만 일치연산자는 같은 값으로 취급을한다.
일치 연산자 평가 알고리즘은
- 두 피연산자의 유형이 다른 경우, 완전히 같지 않다.
- 두 피연산자가 모두 null이면, 완전히 동일하다.
- 두 피연산자가 모두 undefined일 경우, 완전히 동일하다.
- 피연산자 중 하나 또는 모두가 NaN이면, 완전히 같지 않다.
- 두 피연산자가 모두 참이거나 모두 거짓이면, 완전히 동일하다.
- 두 피연산자가 숫자이고 값이 같으면, 완전히 동일하다.
- 두 피연산자가 문자열이고 값이 같으면, 완전히 동일하다.
- 두 피연산자 모두 동일한 객체 또는 함수에 대한 참조가 잇으면, 완전히 동일하다.
- 1 ~ 8 외의 다른 모든 경우에 피연산자는 완전히 같지 않다.
'Javascript' 카테고리의 다른 글
[JavaScript] Set (1) 2022.05.08 [TypeScript] TypeScript (0) 2022.03.22 [JavaScript] Math 함수 모음 (0) 2022.03.14 [JavaScript] split과 parseInt (0) 2022.03.11 JavaScript 소수점 계산 오류와 해결 (0) 2022.02.23