배워서 남주는 개발자 :)

JS

[ JS 딥다이브 ] 4주차 : 연산자

핏짜보이 2023. 3. 5. 12:34
반응형

 

연산자란?

하나 이상의

표현식을 대상

으로 산술/ 할당/ 비교/ 논리/ 타입/ 지수연산 등을 수행해 하나의 값으로 만드는 것

이때, 연산의 대상을 피연산자 라고 함

피연산자는 값으로 평가될 수 있는 표현식이어야 함

그리고 피연산자와 연산자의 조합으로 이루어진 연산자 표현식값으로 평가될 수 있는 표현식

 

  • 1.산술 연산자

    의미 : 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자값을 만드는 연산자

    (산술 연산이 불가능한 경우, NaN을 반환)

    • 1-1.이항 산술 연산자
      • 2개의 피연산자를 산술연산하여 숫자 값을 만드는 연산자
      • 모든 이항 산술 연산자는 피연산자의 값을 변경하는 side effect가 없음 = 피연산자의 값이 바뀌지 않고 항상 새로운 값을 만듦

       

    • 1-2.단항 산술 연산자
      • 1개의 피연산자를 산술 연산하여 숫자값을 만드는 연산자
      • 증가/ 감소(++/ --)연산자는 위치에 의미가 있음
      let a = 10; let result;  // 선할당 후증가 result = a++ console.log(result, a)     //10 11  // 선증가 후할당 result = ++a console.log(result, a)     //12 12  // 선할당 후감소 result = a-- console.log(result, a)     //12 11  // 선감소 후할당 result = --a console.log(result, a)     //10 10
      • + 단항 연산자 사용시, 피연산자를 숫자 타입으로 변환하여 반환
      • - 단항 연산자 사용시, 피연산자의 부호를 반전한 값을 반환, 그리고 숫자 타입이 아닌 피연산자에 사용하면 피연산자를 숫자타입으로 변환하여 반환
      //부호 반전 -(-10);       // 10   //문자열을 숫자로 타입 변환 -'10';        // -10  //불리언 값을 숫자로 타입 변환 -true;        // -1  //문자열은 숫자로 타입 젼환할 수 없으므로 NaN을 반환 -'hello';     // NaN
    • 1-3.문자열 연결 연산자
      • + 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작
      // 문자열 연결 연산자 '1' + 2;            // '12' 1 + '2';            // '12'  // 산술 연산자 1 + 2;              // 3  // true는 1로 타입 변환 => 암묵적 타입 변환 또는 타입 강제 변환 1 + true;           // 2  // false는 0로 타입 변환 => 암묵적 타입 변환 또는 타입 강제 변환 1 + false;          // 1  // null는 0로 타입 변환 => 암묵적 타입 변환 또는 타입 강제 변환 1 + null;           // 1  // undefined는 숫자로 타입 변환되지 않음 +undefined;        // NaN 1 + undefined;     // NaN
  • 2.할당 연산자
    • 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당하는 연산자
  • 3.비교 연산자
    • 3-1.동등/ 일치 비교 연산자
      • 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환하는 연산자
      • 동등 비교(==) 연산자는 좌항과 우항의 피연산자를 비교할 때, 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교함
      • 일치 비교(===) 연산자는 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 true를 반환
      • 위의 두 연산자는 +0과 -0을 동일하다고 평가함, 또한 같은 값인 NaN과 NaN을 비교하면 다른 값이라고 평하함
      • ES6에서 도입된 Object.is 메서드는 다음과 같이 예측 가능한 정확한 비교 결과를 반환
    • 3-2.대소 관계 비교 연산자
      • 피연산자의 크기를 비교하여 불리언 값을 반환하는 연산자

     

  • 4.삼항 조건 연산자
    • 조건식의 평가 결과에 따라 반환할 값을 결정하는 연산자
    •  
    let result = score > 90? 'pass' : 'fail';  if((score > 90) === false){ 	'fail'; }  if((score > 90) === true){ 	'pass'; }
  • 5.논리 연산자
    • 우항과 좌항의 피연산자를 논리 연산하는 연산자
  • 6.쉼표 연산자
    • 왼쪽 피연산자부터 순서대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가결과를 반환하는 연산자
  • 7.그룹 연산자
    • 소괄호() 로 피연산자를 감싸는 그룹연산자는 자신의 피연산자인 표현식을 가장 먼저 평가함
    • 그룹 연산자는 연산자 우선순위가 가장 높음
  • 8.typeof 연산자
    • typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환하는 연산자
    • typeof 연산자로 null값을 연산하면 ‘null’이 아닌 ‘object’를 반환!
    • 값이 null타입인지 확인할때에는 typeof 연산자 대신에 일치 연산자(===)를 사용!
    • 선언하지 않은 식별자를 typeof 연산자로 연산하면 ReferenceError가 발생하지 않고, undefined를 반환
  • 9.지수 연산자
    • 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭제곱하여 숫자 값을 반환하는 연산자
    • 참고로 지수연산자가 도입되기 전에는 Math.pow()메서드를 사용함
    2 ** 2;    // 4 
    2 ** 0;    // 1 
    2 ** -2;   // 0.25  
    
    // 아래의 경우 가독성이 좋음 
    2 ** 2 ** 2;                 // 16 
    Math.pow(Math.pow(2,2),2);   // 16  
    
    // 음수를 거듭제곱의 밑으로 사용해 계산하려면 괄호로 묶어야 함 
    (-5) ** 2;  // 25  
    
    // 지수 연산자를 다른 산술 연잔자와 마찬가지로 할당 연산자와 함께 사용가능 
    let a = 5 a **= 2;   // 25
  • 10.이외의 연산자









  • 11.연산자의 Side Effect
    • 대부분의 연산자는 side effect가 없음
    • 하지만 할당 연산자(=), 증가/감소 연산자(++/--), delete 연산자는 side effect 를 가지고 있음

 

 

728x90