RedPlug's Tory

07장 연산자

  • 연산자? 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산(operation)등을 수행해 하나의 값을 만드는것.

  • 피연산자(operand) : 연산의 대상이 되는 것.

  • 예제 07-01

    // 산술 연산자
    5 * 4 // -> 20
    
    // 문자열 연결 연산자
    'My name is ' + 'Lee' // 'My name is Lee'
    
    // 할당 연산자
    color = 'red' // -> 'red'
    
    // 비교 연산자
    3 > 5 // -> false
    
    // 논리 연산자
    true && false // -> false
    
    // 타입 연산자
    typeof 'Hi' // -> string

    7.1 산술 연산자

    • 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다.
    • 산술 연산이 불가할 경우 NaN을 반환

    7.1.1 이항 산술 연산자

    • 2개의 피연산자를 산술 연산 하는 것

      이항 산술 연산자 의미 부수 효과
      + 덧셈 X
      - 뺄셈 X
      * 곱셈 X
      / 나눗셈 X
      % 나머지 X
    • 예제 07-02

      5 + 2; // -> 7
      5 - 2; // -> 3
      5 * 2; // -> 10
      5 / 2; // -> 2.5
      5 % 2; // -> 1

    7.1.2 단항 산술 연산자

    • 1개의 피 연산자를 산술 연산하여 숫자 값을 만든다

      단항 산술 연산자 의미 부수 효과
      ++ 증가 O
      -- 감소 O
      + 어떠한 효과도 없다. 음수를 양수로 반전하지도 않는다. X
      - 양수를 음수로, 음수를 양수로 반전한 값을 반환한다. X
    • 예제 07-03

      var x = 1;
      
      // ++ 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이루어진다.
      x++; // x = x + 1;
      console.log(x); // 2
      
      // -- 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이루어진다.
      x--; // x = x - 1;
      console.log(x); // 1
    • 증가/감소 연산자는 위치에 의미가 있다

      • 피연산자 앞에 위치한 전위 증가/감소 연산자는 먼저 피 연산자의 값을 증가.감소시킨 후 다른 연산을 수행한다.
      • 피 연산자가 뒤에 위치한 후위 증가/감소 연산자는 먼저 다른 연산을 수행한 후, 피 연산자의 값을 증가/감소 시킨다.
    • '-' 단항 연산자는 피 연산자의 부호를 반전한 값이 반환 된다.

    7.1.3 문자열 연결 연산자

    • '+' 연산자는 피연산자중 하나 이상의 문자열인 경우 문자열 연결 연산자로 동작한다.
    • 1 + true를 연산하면 자바스크립트 엔진은 암묵적으로 true를 1로 타입을 강제로 변환후 연산을 수행한다. -> 암묵적 타입변환, 타입 강제 변환

    7.2 할당 연산자

    • 우항에 이쓴 피 연산자의 평가 결과를 좌항에 있는 변수에 할당한다.

    7.3 비교 연산자

    • 좌항과 우항의 피 연산자를 비교한 다음 그 결과를 불리언 값을 반환한다.
    • if나 for문 과 같은 제어문의 조건식에 주로 사용

    7.3.1 동등/일치 비교 연산자

    • == : 동등 비교

    • === : 값과 타입이 같음

    • != : 값이 다름

    • !== : 값과 타입이 다름

    • 동등 비교(==) 연산자는 편리하긴 하지만 결과를 예측하기 어렵고 실수하기 쉽다. -> 사용핮 않는 편이 좋다 대신 일치 비교 연산자를 사용한다,

    • NaN는 자신과도 일치 하지 않는 값으로 빌트인 함수 isNaN을 사용한다.

    7.3.2 대소 관계 비교 연산자

    • 'x > y' : x가 y보다 크다
    • 'x < y' : x가 y보다 작다
    • 'x >= y' : x가 y보다 크거나 같다
    • 'x <= y' : x가 y보다 작거나 같다

    7.4 삼항 조건 연산자

    • 조건식의 평가 결과에 따라 반환할 값을 결정한다.

    • 조건식 ? 조건식이 true일때 반환할 값 : 조건식이 false 일때 반환할 값.

    • 예제 07-21

      var x = 2;
      
      // 2 % 2sms 0이고 0은 false로 암묵적 타입 변환된다.
      var result = x % 2 ? '홀수' : '짝수';
      console.log(result); // 짝수
    • 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다.

    • 조건에 따라 어떤 값을 결정해야 한다면 if ... else문보다 삼항 조건 연산자 표현식을 사용하는 편이 유리하다.

    7.5 논리 연산자

    • 우항과 좌항의 피연산자를 논리 연산한다.

    • || : 논리합(OR)

    • && : 논리곱(AND)

    • ! : 논리부정(NOT)

    • 논리 부정(!) 연산은 언제나 불리언 값을 반환한다.

    • 논리합, 논리곱 연산자는 불리언 값이 아닐 수 있다.

    • 예제 07-27

      // 단축 평가
      'Cat' && 'Dog'; // -> 'Dog'

    7.6 쉼표 연산자

    • 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다

    7.7 그룹 연산자

    • 소괄호로 피 연산자를 감싸는 그룹연산자, 자신의 피연산자인 표현식을 가장 먼져 평가
    • 우선순위를 조절 할 수 있다.

    7.8 typeof 연산자

    • 피 연산자의 데이터 타입을 문자열로 반환한다.
    • string, number, boolean, undefined, symbol, object, function
    • null을 반환하는 경우는 없다. -> object를 반환한다. 버그임-> 아직 수정 안됨
    • null타입인지 확인할 때는 typeof가 아닌 일치연산자(===)를 사용
    • 선언하지 않은 식별자는 undefined를 리턴 한다.

    7.9 지수 연산자

    • ES7에 도입된 지수 연산자

    • 좌항으 ㅣ피연산자를 우항의 피연산자를 지수로 거듭 제곱하여 숫자로 값을 반환한다

    • 예제 07-34

      2 ** 2; // 4
      2 ** 2.5; // 5.65685424949238
      2 ** 0; // 1
      2 ** -2; // 0.25
    • 그 전에는 Math.pow 매써드를 사용했음.

    • 음수를 거듭제곱 밑으로 사용해 계산하려면 괄호로 묶어야 한다.

    • 지수 연산자는 이항 연산자 중에서 우선순위가 가장 높다.

    7.10 그 외의 연산자

    • 연산자가 더 있으나 나중에 나올 것들
    • '?.' : 옵셔널 체이닝 연산자
    • '??' : null 병합 연산자
    • 'delete' : 프로퍼티 삭제
    • 'new' : 생성자 함수를 호출할 때 사용하여 인스턴스를 생성
    • 'instanceof' : 좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별
    • 'in' : 프로퍼티 존재 확인

    7.11 연산자의 부수 효과

    • 일부 연산자는 다른 코드에 영향을 주는 부수효과가 있다.
    • 할당 연산자(=)
    • 증가/감소 연산자(++/--)
    • delete 연산자

    7.12 연산자 우선순위

    우선순위 연산자
    1 ()
    2 new(매개변수 존재), ., [](프러퍼티 접근,) ()(함수호출), ? .(옵셔널 체이닝 연산자)
    3 new(매개변수 미존재)
    4 x++, y--
    5 !x, +x, -x, ++x, --x, typeof, delete
    6 **(이항 연산자 중에서 우선순위가 가장 높다.)
    7 *, /, %
    8 +, -
    9 <, <=, >, >=, in, instanceof
    10 ==, !=, ===, !==
    11 ??(null 병합 연산자)
    12 &&
    13 ||
    14 ? ... : ....
    15 할당 연산자(=, +=, -=, ...)
    16 ,
    • 일일이 기억이 어렵기 때문에 그룹연산자를 사용하여 명시적으로 조절하는 것을 권장한다.

    7.13 연산자 결합 순서

    결합 순서 연산자
    좌항 -> 우항 +, -, /, %, <, <=, >, >=, &&, ||, ., [], (), ??, ?., in, instanceof
    우항 -> 좌항 ++, --, 할당연산자(=, +=, -=, ...), !x, +x, -x, ++x, --x, typeof, delete, ? ... : ...