본 게시글에선 기본적인 연산자에 대한 설명은 생략하고 주의하거나 헷갈릴만한 것들에 대해서만 안내하고 있습니다.

01. 산술 연산자

  • 연산이 불가능한 경우 NaN를 반환합니다.

  • 단항(unary) 상술 연산자의 경우 피연산자(operand)의 값을 변경하는 부수 효과(side effect)가 있는 경우가 있습니다. 증가(++), 감소(--) 연산자가 이에 해당됩니다. 또한 해당 연산자는 위치에 따라 의미하는 바가 다릅니다.

    var x = 0, result;
    
    result = x++; // postfix increment operator (선할당 후증가)
    console.log(x, result); // 1 0
    
    result = ++x; // prefix increment operator (선증가 후할당)
    console.log(x, result); // 2 2 
    
    result = x--; // postfix decrement operator (선할당 후감소)
    console.log(x, result); // 2 1
    
    result = --x; // prefix decrement operator (선감소 후할당)
    console.log(x, result); // 0 0
  • +, - 단항 상술 연산자의 경우 숫자 타입이 아닌 피연산자에 사용하면 숫자 타입으로 변환하여 반환합니다.

    console.log(-'1'); // -1
    console.log(+true); // 1
    console.log(-false); // -0
    console.log(-'hi'); // NaN
  • + 연산자는 피연산자 중 문자열이 하나 이상 존재할 경우 문자열 연결 연산자로 동작합니다. 존재하지 않을 경우 산술 연산자로 동작합니다.

    console.log(1 + 23); // 123
    console.log('1' + 23); // '123'
    console.log(1 + true); // 2
    console.log(1 - false); // 1
    console.log(1 + null); // 1
    console.log(1 + undefined); // NaN

    이렇게 개발자의 의도와 상관없이 암묵적으로 타입이 변환되는 현상을 암묵적 타입 변환(implicit coercion)이라고 합니다.

02. 비교 연산자

  • 동등 비교(==) 연산자의 경우 암묵적 타입 변환을 통해 타입을 일치시킨 후 값을 비교합니다. 하지만 결과를 예측하기 어렵고 실수하기 쉽기 때문에 최대한 일치 비교(===) 연산자 사용을 지향하는 것이 좋습니다.

  • 아래는 주의할 상황입니다.

    // 동등 비교 주의
    '0' == ''; // false
    0 == ''; // true
    false == '0'; // true
    false == 0; // true
    false == null; // false
    null == undefined; // true
    
    // 일치 비교 주의
    NaN === NaN; // false (자기 자신과 일치하지 않는 유일한 값)
    isNaN(NaN); // true
    0 === -0; // true
    
    // Object.js 메서드
    Object.is(NaN, NaN); // true
    Object.is(-0, +0); // false

03. 삼항 조건 연산자

  • 아래 형태는 JavaScript의 유일한 삼항 조건 연산자입니다.
    (조건식) ? (true일 때 반환값) : (false일 때 반환값)
  • if ... else 문은 값을 반환하는 표현식이 아닌 문이기 때문에 값처럼 사용할 수 없지만 삼항 조건 연산자는 표현식이기 때문에 값으로 평가할 수 있습니다.
    var result = if (true) { '진실' } else { '거짓' }; // SyntaxError: Unexpected token 'if'
    var result = true ? '진실' : '거짓';

04. 논리 연산자

  • 논리 부정 연산자는 언제나 불리언 값을 반환합니다.
    !0; // true
    !''; // true
    !1; // false
    !'0'; // false
  • 논리합, 논리곱 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가됩니다.
    0 && ''; // 0
    0 || '' ; // ''

05. typeof 연산자

  • typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환합니다.

  • 반환되는 문자열은 string, number, boolean, undefined, symbol, object, function 중 하나입니다.

  • 아래는 주의할 상황입니다.

    // typeof의 null 반환값은 'object' 입니다.
    typeof null; // 'object'
    
    // 선언하지 않은 식별자의 반환값은 'undefined' 입니다.
    typeof undeclared; // 'undefined'

06. 그 외

profile
해피한하루

0개의 댓글

Powered by GraphCDN, the GraphQL CDN