일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- v9
- 리액트
- 컴포넌트
- 원티드
- JS
- Reducer
- react localStorage
- 브라우저
- TypeScript
- JavaScript
- 프리온보딩
- Frontend
- Component
- firebase
- 자바스크립트
- 타입스크립트
- 프론트엔드
- es6
- 프로그래머스
- axios
- array
- CORS
- react
- state
- Redux
- localstorage
- 파이어베이스
- 알고리즘
- til
- 비트 연산자
- Today
- Total
도리쓰에러쓰
[JavaScript] 단항 산술 연산자, 문자열 연결 연결자, 비교 연산자, Object.is() 본문
'모던 자바스크립트' 책을 읽고 익숙하지 않은 내용 위주로 정리 해보려고 한다.
우선, 연산자와 피연산자의 의미는 아래와 같다.
1 + 2
- 연산자 : 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다. (위 예시에서 +가 연산자이다.)
- 피연산자 : 연산의 대상 (위 예시에서 1과 2가 피연산자이다.)
1. 단항 산술 연산자
1️⃣ + 단항 연산자는 피연산자에 어떠한 효과도 없다.
음수를 양수로 반전하지도 않는다.
+10; // 10
+(-10); // -10
숫자 타입이 아닌 피연산자에 + 단항 연산자를 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.
이 때, 피연산자를 변경하는 것이 아닌 숫자 타입을 변환한 값을 생성하여 반환한다.
// 문자열을 숫자로 변환
let x = '1';
console.log(+x); // 1
console.log(x); // "1"
// boolean 값을 숫자로 변환
x = true;
console.log(+x); // 1
console.log(x); // true
// boolean 값을 숫자로 변환
x = false;
console.log(+x); // 0
console.log(x); // false
// 문자열을 숫자로 변환할 수 없어서 NaN으로 반환
x = 'Hello';
console.log(+x); // NaN
console.log(x); // "Hello"
2️⃣ - 단항 연산자는 피연산자의 부호를 반전한 값으로 반환한다.
+ 단항 연산자와 마찬가지로 숫자 타입이 아닌 피연산자에 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.
// 부호 반전
-(-10); // 10
// 문자열을 숫자로 변환
-'10'; // -10
// boolean 값을 숫자로 변환
-true; // -1
// 문자열을 숫자로 변환할 수 없어서 NaN으로 반환
-'Hello'; // NaN
2. 문자열 연결 연결자
+ 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
// 문자열 연결 연산자
'1'+2; // '12'
// true는 1로 변환
1 + true; // 2
// false는 0으로 변환
1 + false // 1
// undifined는 숫자로 타입 변환 되지 않는다
1 + undifined; // NaN
💡 개발자의 의도와 상관없이 JavaScript 엔진에 의해 암묵적으로 타입이 자동 변환 되는 것을
암묵적 타입 변환(Implicit Coercion) 혹은 타입 강제 변환(Type Coercion)이라고 한다.
3. 비교 연산자
비교 연산자 | 의미 | 설명 |
x == y | 동등 비교 | x와 y의 값이 같음 |
x === y | 일치 비교 | x와 y의 값과 타입이 같음 |
x != y | 부동등 비교 | x와 y의 값이 다름 |
x !== y | 불일치 비교 | x와 y의 값과 타입이 다름 |
1️⃣ 동등 비교(==) 연산자
동등 비교(==) 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교한다.
5 == 5; // true
5 == '5'; // true
또한, 동등 비교(==) 연산자는 결과를 예측하기 어려워 실수하기 쉽다.
'0' == ''; // false
0 == ''; // true
0 == '0'; // true
false == 'false'; // false
false == '0'; // true
false == null; // false
false == undifined; // false
💡 따라서, 동등 비교(==) 연산자는 사용하지 않는 편이 좋고, 일치 비교(===) 연산자를 사용하는 것이 좋다.
2️⃣ 일치 비교(===) 연산자
일치 비교(===) 연산자는 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 true를 반환한다.
동등 비교(==) 연산자처럼 암묵적 타입 변환이 되지 않는다.
5 === 5; // true
5 === '5'; // false
단, 일치 비교(===) 연산자에서 NaN은 동일한 값으로 보지 않아 false가 반환된다.
* NaN은 자신과 일치하지 않는 유일한 값
NaN === NaN; // false
💡 동등 비교(==) 연산자과 일치 비교(===) 연산자는 +0과 -0을 동일하다고 평가하고, NaN과 NaN을 다른 값으로 평가한다. JavaScript ES6 문법인 Object.is() 메서드는 정확한 비교 결과를 반환한다. 그 외에는 일치 비교(===) 연산자와 동일하게 동작한다.
-0 === +0; // true
Object.is(-0, +0); // false
NaN === NaN; // false
Object.is(NaN, NaN); // true
3️⃣ 부동등 비교(!=) 연산자와 불일치 비교(!==) 연산자
부동등 비교(!=) 연산자와 불일치 비교(!==) 연산자는 동등 비교(==) 연산자와 일치 비교(===) 연산자의 반대 개념이다.
// 부동등 비교 연산자
5 != 8; // true
5 != 5; // false
5 != '5'; // false
// 불일치 비교 연산자
5 !== 8; // true
5 !== 5; // false
5 !== '5'; // true
'JavaScript > JS' 카테고리의 다른 글
[JavaScript] null 병합 연산자 (Nullish Coalescing Operator) - ?? (0) | 2022.03.02 |
---|---|
[JavaScript] 옵셔널 체이닝 연산자 (Optional Chaining Operator) - ?. (0) | 2022.03.02 |
[JavaScript] ES11 새로운 데이터 타입 :: BigInt (0) | 2022.02.10 |
[JavaScript] 배열 메소드 find()과 findIndex() (0) | 2022.02.02 |
[JavaScript] 변수 선언 var(ES5) / let, const(ES6)의 차이점 (0) | 2022.01.24 |