[JS] javaScript 기본 연산자와 비교 연산자
01. 기본 연산자와 수학
자바스크립트의 기본 연산자: -
+,
-
, *
, /
, %
(나머지 연산자), **
(거듭제곱 연산자, 제곱근도 가능)
피연산자(operand)는 연산자가 연산을 수행하는 대상이다. 연산자는 피연산자 개수에 따라 단항 연산자, 이항 연산자, 삼항 연산자로 나뉜다.
01-01. 거듭 제곱 연산자
거듭제곱 연산자를 사용한 a ** b
는 a를 b번 곱한 값이 반환된다.
console.log(2 ** 2) // 4
console.log(2 ** 3) // 8
console.log(2 ** 4) // 16
01-02. 이항 연산자 ‘+’의 문자열 연결
이항 연산자 +의 피연산자 중 하나가 문자열이면 두 피연산자를 문자형으로 형 변환해서 병합한다. +에만 이런 기능이 존재하며, 나머지 산술 연산자는 피연산자를 숫자형으로 형 변환해서 계산한다.
console.log(2 + 2 + '1'); // '221'이 아니라 '41'이 출력된다.
01-03. 단항 연산자 ‘+’의 형 변환
단항 연산자 +는 피연산자를 숫자형으로 변환해준다. Number(value)와 동일한 일을 하며 코드의 길이를 줄일 수 있다. 숫자에 붙이면 아무 일도 안 일어난다.
console.log(+true); // 1
console.log(+''); // 0
01-04. 연산자 우선순위
단항 연산자는 이항 연산자보다 우선순위가 더 높다.
우선순위 테이블 참고
02. 비교 연산자
자바스크립트의 비교 연산자는 다음과 같다.
- [>, <, >=, <=, ==, !=, ===, !==]
02-01. 불린형 반환
비교 연산자는 불린형을 반환한다.
console.log(2 > 1); // true
console.log(2 == 1); // false
console.log(2 != 1); // true
02-02. 문자열 비교
자바스크립트는 문자열을 비교할 때 사전 순으로 비교한다. 사전에서 뒤에 있는 문자열이 더 크다고 판단한다.
console.log('Z' > 'A'); // true
console.log('Glow' > 'Glee'); // true
console.log('Bee' > 'Be'); // true
정확히는 사전 순이 아닌 유니코드 순이다. 소문자 ‘a’가 대문자 ‘A’보다 크다고 판단한다.
02-03. 다른 형을 가진 값의 비교
비교하려는 값의 자료형이 다르면 해당 값들은 숫자형으로 형 변환된 후 비교된다.
let a = 0;
console.log(Boolean(a)); // false
let b = '0';
console.log(Boolean(b)); // true
console.log(a == b); // true, 비교 연산자는 피연산자들을 숫자형으로 형 변환해서 비교하기 때문에 이러한 모순이 일어난다.
02-04. 일치 연산자
일치 연산자 ===
와 불일치 연산자 !==
를 사용하면 형 변환 없이 값을 비교할 수 있다. 이 연산자를 사용하면 에러가 발생할 확률을 줄일 수 있으므로, 특별한 경우가 아니면 ==
, !=
대신 이 연산자를 사용해야 한다.
console.log(0 == false); // true
console.log(0 === false); // false
02-05. null/undefined에 적용되는 특수한 규칙
- 동등 연산자
(==)
는null
과undefined
를 ‘각별한 커플’처럼 취급한다. 둘을 비교하는 경우에만 true를 반환하고 이외의 경우에는 false를 반환한다.
console.log(null === undefined); // false
console.log(null == undefined); // true
console.log(null == 0); // false
- 비교 연산자(<, >, <=, >=)에서 null은 0, undefined는 NaN으로 변환된다. NaN가 피연산자인 경우에는 항상 false를 반환한다.
console.log(null > 0); // false
console.log(null >= 0); // true
console.log(undefined > 0); // false
console.log(undefined == 0); // false
- 위와 같이 특수한 경우를 피하기 위해, 일치 연산자(
===
)를 제외한 비교 연산자의 피연산자에null/undefined
가 오지 않도록 특별히 주의한다. 만약 변수가 null/undefined가 될 가능성이 있다면 이를 처리하는 로직을 따로 추가한다.