2024.01.17 TIL - Deep Dive

명화·2024년 1월 17일

TIL

목록 보기
7/15

📚 [모던 자바스크립트 Deep Dive] 7장 연산자


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

피연산자(operand)는 연산의 대상이며, 값으로 평가될 수 있는 표현식이어야 한다.

📝 7.1 산술 연산자

산술 연산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 값을 만든다. (산술 연산이 불가능한 경우, NaN 반환)

  • 이항 산술 연산자

    • 2개의 피연산자를 산술 연산하여 숫자 값을 만든다.
    • 모든 이항 산술 연산자(+ - * / %)는 피연산자의 값을 변경하는 부수 효과가 없다. (새로운 값을 만들 뿐)
  • 단항 산술 연산자

    • 1개의 피연산자를 연산하여 숫자 값을 만든다.
    • 증가/감소(++ / --) 연산자는 피연산자의 값을 변경하는 부수 효과가 있다. (위치에 따라 선할당 후증가, 선증가 후할당)
    • + 단항 연산자는 피연산자를 숫자 타입으로 변환하여 반환한다.
    • - 단항 연산자는 숫자 타입 피연산자의 부호를 반전한 값을 반환한다.
  • 문자열 연결 연산자

    • + 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
    //문자열 연결 연산자
    '1' + 2; // '12'
    1 + '2'; // '12'
    
    //true는 1로 타입 변환
    1 + true; // 2
    //fasle는 0으로 타입 변환
    1 + false; //1
    //null은 0으로 타입 변환
    1 + null; //1
    //undefined는 숫자로 타입 변환되지 않는다.
    +undefined; // NaN
    1 + undefined; // NaN
    • 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는데 이를 암묵적 타입 변환 또는 타입 강제 변환 이라고 한다.

📝 7.2 할당 연산자

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

할당 연산자(= += -= *= /= %=)는 좌항의 변수에 값을 할당하므로 변수 값이 변하는 부수 효과가 있다.

📝 7.3 비교 연산자

비교 연산자는 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환한다.

  • 동등/일치 비교 연산자

    • 동등 비교(==) 연산자는 먼저 암묵적인 타입 변환을 통해 타입을 이치시킨 후 값은 값인지 비교한다. (같은 값일 수 있다면 true 반환) ⇒ 반대는 부동등 비교 연산자(!=)
    • 일치 비교(===) 연산자는 타입도 같고 값도 같은 경우에 한하여 true를 반환한다. ⇒ 반대는 불일치 비교 연산자(!==)

      ❗ 주의 ❗
      NaN === NaN; // false
      NaN은 자신과 일치하지 않는 유일한 값이다.
      숫자가 NaN인지 조사하려면 빌트인 함수 isNaN을 사용한다. isNaN(NaN); // true

    0 === -0; // true 0 == -0; // true
    양의 0과 음의 0의 일치 비교/동등 비교 결과는 모두 true이다.

  • 대소 관계 비교 연산자
    대소 관계 비교 연산자(> < >= <=)는 피연산자의 크기를 비료하여 불리언 값을 반환한다.

📝 7.4 삼항 조건 연산자

삼항 조건 연산자는 조건식의 평가 결과에 따라 반환할 값을 결정한다. (값으로 평가할 수 있는 표현식인 문)

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

📝 7.5 논리 연산자

논리 연산자(|| && !)는 우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산한다.

📝 7.6 쉼표 연산자

쉼표(,) 연산자는 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다.

var x, y, z;

x = 1, y = 2, z = 3; // 3

📝 7.7 그룹 연산자

소괄호(())로 피연산자를 감싸는 그룹 연산자를 가장 먼저 평가한다. (우선순위 조절 가능)

그룹 연산자는 연산자 우선순위가 가장 높다.

10 * 2 + 3; // 23

//그룹 연산자를 사용하여 우선순위를 조절
10 * (2 + 3); // 50

📝 7.8 typeof 연산자

typeof 연산자는 피연산자의 데이터 타입을 문자열(string, number, boolean, undefined, symbol, object, function) 중 하나를 반환한다.

null은 object로 반환하며, 함수의 경우 function을 반환한다.

📝 7.9 지수 연산자

ES7에 도입된 지수 연산자(**)는 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환한다.

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

2 ** 2; // 4

//지수 연산자가 도입되기 전
Math.pow(2, 2); //4

//음수의 경우 괄호로 묶어서 사용
(-5) ** 2; // 5

0개의 댓글