연산자

하나 이상의 표현식을 대상으로 산술,할당 등을 수행해서 하나의 값을 만ㄷ르어준다. 이때 연산 대상을 피연산자라고한다. -> 피연산자는 값으로 평가될 수 있는 표현식이어야한다.

산술 연산자

  • 수학적 계산을 수항하고 불가능한 경우 NaN을 반환한다.
  • 피연산자 개수에 따라 이항 산술 연산자와 단항 산술 연산자로 구분 가능하다.

이항 산술 연산자

  • 2개의 피연산자를 산술 연산한다.
  • 피연산자의 값이 변경되지 않고 언제나 새로운 값을 만든다. (부수효과가 없음)
  • +,-,*,/,%

단항 산술 연산자

  • 1개의 피연산자를 산술 연산하여 값을 만든다.
  • ++,--,+,-
    • 이 중 ++, -- 는 피연산자의 값을 변경하는 부수효과가 있다.
let x = 1;
x++
console.log(x) // 2
x--
console.log(x) // 1

++--의 위치에는 의미가 있는데

  • 피연산자 앞에 두었을 때 (++x)
    - 먼저 피연산자의 값 증가/감소 후 다른연산을 수행
  • 뒤에 두었을 때 (x++)
    - 다른 연산을 먼저 한 후 피연산자의 값을 증가시킴

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

let x = '1';
console.log(+x); // 1
x = true;
console.log(+x); // 1
x = false;
console.log(+x); // 0
x = 'hello'
console.log(+x); // NaN
console.log(x) // 'hello', 부수효과가 없다.

문자열 연결 연산자

  • +는 피연산 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.

할당 연산자

  • 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.
  • =,+=,-=,*=,/=,%=

비교연산자

동등/일치 비교 연산자

  • 동등 비교는 값이 같은지만 비교하고 일치 비교는 값과 타입 모두 일치하는지 확인한다.
  • ==,===, !=, !==
  • 동등 비교 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교한다. 결과 예측이 어렵기 때문에 일치비교 연산자를 사용하는 것이 좋다.

    일치 비교에서 NaN은 자신과 일치하지 않는 유일한 값이다

NaN === NaN; // false

대소 관계 비교 연산자

  • 크기 비교
  • >,<,>=,<=

삼항 조건 연산자

  • 조건식의 평가 결과에 따라 반환할 값을 결정한다
const x = 2;
const result = x % 2 ? '홀수' : '짝수';

console.log(result); // 짝수
  • 첫번째 ?앞에 있는 첫번째 피연산자가 true로 평가되면 두번째 피연산자를 반환하고 false로 평가되면 세 번째 피연산자랄 반환한다.
  • if...else 문과 비슷하지만 삼항연산자는 표현식이기때문에 값처럼 사용할 수 있다.

논리 연산자

  • ||(OR), &&(AND), !(NOT)
  • 논리 부정 연산자(!)는 언제나 boolean 값을 반환한다. 암묵적 타입변환하여 반환한다.
!0; // true
!'Hello'; // false

드모르간 법칙을 이용하면 좀 더 좋은 표현식으로 변환할 수 있다.

!(x || y) <-> (!x && !y)
!(x && y) <-> (!x || !y)

쉼표 연산자

  • 왼쪽 피연산자부터 차례로 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평과 결과를 반환한다.
let x,y,z;
x=1,y=2,z=3 // 3

그룹연산자

  • () 로 피연산자를 감싸고 그 표현식을 가장 먼저 평가한다.
    연산자 우선순위가 가장 높다.

typeof 연산자

  • 데이터 타입을 문자열로 반환한다.
    • null의 경우 "null"이 아닌 "object"를 반환하는데, 이는 자바스크립트 첫 번째 버전의 버그다. 그런데 기존코드에 영향을 줄 수 있기 때문에 아직까지 수정되지 못하고 있다.
    • 선언한 적 없는 변수를 typeof로 연산해보면 error를 내지 않고 undefined를 반환한다.

지수 연산자

  • es7에서 추가된 연산자로 좌항이 밑, 우항이 지수로 거듭제곱한다
3 ** 3 // 27
Math.pow(3,3) // 27
  • 음수를 거듭제곱의 밑으로 사용하여 계산하려면 괄호로 묶어야한다. (안하면 에러가 난다.)
(-5) ** 2;

그 외 연산자

  • ?.
    • optional chaining
  • ??
    • null 병합 연산자
  • delete
    • property 삭제
  • new
    • 생성자 함수를 호출할 때 사용하여 인스턴스를 생성함
  • `instanceof
    • 좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판변
      -in
    • 프로퍼티 존재 확인

부수 효과

  • 대부분 연산자는 다른 코드에 영향을 주지 않지만 =, ++, --, delete 연산자는 부수효과가 있다

연산자 우선순위


0개의 댓글

Powered by GraphCDN, the GraphQL CDN