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에 적용되는 특수한 규칙

  • 동등 연산자(==)nullundefined를 ‘각별한 커플’처럼 취급한다. 둘을 비교하는 경우에만 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가 될 가능성이 있다면 이를 처리하는 로직을 따로 추가한다.