7장 연산자
연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다. 이때 연산의 대상을 피연산자라 한다. 피연산자는 값으로 평가될 수 있는 표현식이어야 한다. 그리고 피연산자와 연산자의 조합으로 이뤄진 연산자 표현식도 값으로 평가될 수 있는 표현식이다.
7.1 산술 연산자
산술 연산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다. 피연산자의 개수에 따라 이항 산술 연산자와 단항 산술 연산자로 구분할 수 있다.
7.1.1 이항 산술 연산자
이항 산술 연산자는 2개의 피연산자를 산술 연산해 숫자 값을 만든다.
+, -, *, /, %
모든 이항 산술 연산자는 피연산자의 값을 변경하는 부수 효과가 없다. 어떤 산술 연산을 해도 피연산자의 값이 바뀌는 경우는 없고 언제나 새로운 값을 만든다는 뜻이다.
7.1.2 단항 산술 연산자
단항 산술 연산자는 1개의 피연산자를 산술 연산해 숫자 값을 만든다.
++, —, +, -
증가/감소(++, —) 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이뤄져 부수 효과가 발생한다.
7.1.3 문자열 연결 연산자
연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
이러한 동작은 개발자의 의도와 상관없이 JS 엔진에 의해 암묵적으로 타입이 전환되는 것이다.
이를 암묵적 타입 변환, 타입 강제 변환이라고 한다.
7.2 할당 연산자
할당 연산자는 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다. 좌항의 변수에 값을 할당하므로 변수 값이 변하는 부수 효과가 있다.
7.3 비교 연산자
비교 연산자는 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환한다. if 문이나 for 문과 같은 제어문의 조건식에서 주로 사용한다.
7.3.1 동등/일치 비교 연산자
동등 비교 연산자와 일치 비교 연산자는 좌항과 우항의 피연산자가 같은 값으로 평가되는지 비교해 불리언 값을 반환한다. =의 개수에 따라 비교하는 엄격성이 다르다. 동등 비교 연산자 == 는 값만 비교하는 느슨한 비교를 하지만 일치 비교 연산자 ===는 타입까지 검사하는 엄격한 비교를 한다.
==, ===, !=, !==
ES6에서 도입된 메서드로 예측 가능한 정확한 비교 결과를 반환한다.
7.3.2 대소 관계 비교 연산자
대소 관계 비교 연산자는 피연산자의 크기를 비교해 불리언 값을 반환한다.
, <, >=, <=
7.4 삼항 조건 연산자
삼항 조건 연산자는 조건식의 평과 결과에 따라 반환할 값을 결정한다. JS의 유일한 삼항 연산자이며, 부수 효과는 없다. if else 문과 유사하게 작동하지만, 삼항 조건 연산자 표현식은 값처럼 사용 가능하다는 중요한 차이가 있다.
7.5 논리 연산자
논리 연산자는 우항과 좌항의 피연산자를 논리 연산한다.(부정 논리 연산자의 경우 우항의 피연산자)
||, &&, !
7.6 쉼표 연산자
쉼표 연산자는 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다.
7.7 그룹 연산자
소괄호로 피연산자를 감싸는 그룹 연산자는 자신의 피연산자인 표현식을 가장 먼저 평가한다. 그룹 연산자의 연산자 우선순위가 가장 높다.
7.8 typeof 연산자
typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환한다. 7가지(string, number, boolean, undefined, symbol, object, function) 중 하나를 반환하며 null 을 반환하는 경우는 없다. null 타입을 확인하려면 일치 연산자 === 를 사용하면 된다. (typeof 연산자로 null 값을 연산하면 object를 반환하는데 이는 JS의 첫 번째 버전의 버그이지만 기존 코드에 영향을 줄 수 있기에 아직까지 수정되지 않았다.)
7.9 지수 연산자
ES7에서 도입된 지수 연산자는 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱해 숫자 값을 반환한다.
7.10 그 외 연산자
다양한 연산자가 있으며, 이후 챕터에서 등장함
?.
옵셔녈 체이닝 연산자
??
null 병합 연산자
delete
프로퍼티 삭제
new
생성자 함수를 호출할 때 사용해 인스턴스를 생성
instanceof
좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별
in
프로퍼티 존재 확인
7.11 연산자의 부수 효과
일부 연산자는 다른 코드에 영향을 주는 부수 효과가 있다. 부수 효과가 있는 연산자는 할당 연산자 =, 증가/감소 연산자 ++ / —, delete 연산자
7.12 연산자 우선순위
연산자가 실행되는 순서.
() ⇒ new ⇒ x++,x— ⇒ !x, typeof, delete ⇒ ** ⇒ * / % ⇒ + - ⇒ < <= in instanceof ⇒ == !== ⇒ ?? ⇒ && ⇒ || ⇒ ? … : … ⇒ 할당 연산자 ⇒ ,
7.13 연산자 결합 순서
연산자의 어느쪽부터 평가를 수행할 것인지를 나타내는 순서
Last updated
Was this helpful?