JavaScript/모던 자바스크립트 deepdive

[모던 자바스크립트 딥다이브/ 7 연산자]

_서리__ 2024. 3. 5. 19:48

7 연산자

7.1. 산술연산자

산순연산이 불가능한 경우 NaN을 반환한다.

숫자타입이 아닌 피연산자에 + 단항 연산자를 사용하면 피연산자를 숫자타입으로 변환하여 반환한다

  • ‘+’ 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
  • ‘==’동등비교 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입변환을 통해 타입을 일치시킨후 같은 값인지 비교한다.
  • 때분에 동등비교연산자 대신 일치비교’===’ 연산자를 사용하는 것이 좋다. 일치비교 연ㅅ나자는 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 true를 반환한다.
  • NaN은 자신과 일치하지 않는 유일한 값이다. 따라서 숫자가 NaN인지 조사하려면 빌트인함수 isNaN을 사용한다.
  • // isNaN 함수는 지정한 값이 NaN인지 확인하고 그 결과를 불리언 값으로 반환한다. isNaN(NaN); // - true isNaN(10); // • false isNaN(1 + undefined); // 一 true
  • 자바스크립트는 양의 0과 음의 0이 있는데 이들을 비교하면 true를 반환한다.
    • 리액트에서 왜 삼항연산자를 쓰는지 고민해보기 *
  • Object.is 메서드 : 예측가능한 정확한 결과를 반환함.
  • -0 === +0 //true Objext.is(-0, +0) //false NaN === NaN; //false Object.is(NaN,NaN) //true
  • 논리 부정 (!) 연산자는 언제나 불리언값을 반환한다. 만약 피연산자가 불리언값이 아니면 불리언타입으로 암묵적 타입변환된다.
  • !0 //true !'Hello';//false
  • 논리합(||)또는 논리곱(&&) 연산자 표현식의 평가결과는 불리언값이 아닐 수도 있다. 논리합(||) 또는 논리곱(&&) 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다.
  • 'Cat' && 'Dog' ; // ->'Dog'
  • 쉼표 연산자
    var x,y,z;
    
    x = 1, y = 2, z = 3;
    
  • 쉼표(,) 연산자는 왼쪽 피연산자부터 차례로 피연산자를 평가하고 마지막 연산자의 평가가 끝나면 마지막 피연산자의 평가결과를 반환한다.
  • 그룹 연산자는 연산자 우선순위가 가장 높다.
  • typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환한다.
    • string
    • number
    • boolean
    • nudefined
    • symbol
    • object
    • function
    • null 을 반환하는 경우는 없으며, 함수의 경우 function을 반환한다. typeof 연산자가 반환하는 문자열은 7개의 데이터타입과 정확히 일치하지는 않는다.
    typeof null // → “object”
    
    • 따라서 값이 null타입인지 확인할 때는 typeof 연산자를 사용하지 말고 일치연산자(===)를 사용하자.
    • 선언하지 않은 식별자를 typeof연산자로 연산해보면 referenceError가 발생하지 않고 undefined를 반환한다.
    // undeclared식별자를 선언한 적이 없다.
    typeof undeclared; //undefined
    
  • 지수연산자
    • 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭제곱하여 숫자 값을 반환한다.
    2 ** 2; // -> 4
    2 ** 2.5 ; // -> 5.6568...
    2 ** 0 // -> 1
    2 ** -2 // -> 0.25
    
    • 지수 연산자는 다음과 같은 경우 Math.pow 메서드보다 가독성이 좋다.
    2 ** 2 ** 2; // ->16
    Math.pow(Math.pow(2,2),2) // ->16
    
    • 지수 연산자는 다른 산술 연산자와 마찬가지로 할당 연산자와 함께 사용할 수 있다.
    var num = 5;
    num **= 2; // -> 25
    
    //지수 연산자는 이항 연산자 중에서 우선순위가 가장 높다.
    2 * 5 ** 2 // -> 50
    
  • 연산자의 부수효과
    • 할당연산자(=), 증가/감소연산자(++/—), delete연산자는 부수효과가 있다.
    var x;
    // 할당 연산자는 변수 값이 변하는 부수 효과가 있다. 
    // 이는 x변수를 사용하는 다른 코드에 영향을 준다.
    
    x = 1;
    console.log(x); //1
    
    //증가 / 감소연산자(++/--)는 피연산자의 값을 변경하는 부수 효과가 있다.
    // 피연산자 x의 값이 재할당되어 변경된다. 이는 x 변수를 사용하는 다른코드에 영향을 준다.
    
    x++;
    console.log(X); //2
    
    var o = { a : 1 };
    
    // delete 연산자는 객체의 프로퍼티를 삭제하는 부수 효과가 있다. 
    // 이는 o 객체를 사용하는 다른 코드에 영향을 준다.
    
    delete o.a;
    console.log(o); //{}
    
  • 연산자는 종류가 많아서 연산자 우선순위를 모두 기억하기 어렵고 실수하기도 쉽다. 우선순위가 가장 높은 그룹 연산자를 사용하여 우선순위를 명시적으로 조절하는 것을 권장한다.