본문 바로가기
JavaScript/모던자바스크립트 Deep Dive 스터디

[모던JS DeepDive] 7장 연산자

by 복숭아 우유씨 2023. 1. 3.

연산자란?

연산자: 하나 이상의 표현식을 대상으로 다양한 연산을 수행하여 하나의 값을 만드는 것

- 피연산자: 연산의 대상, 표현식이여야 함(값으로 평가될 수 있는)

- 연산자 표현식도 값으로 표현될 수 있는 표현식이여야 함

 

다양한 연산자

대분류 중분류 연산자 의미 부수효과*
산술 연산자
- 수학적 계산을 수행하여 새로운 값 생성
- 불가능할 경우 NaN 반환됨
이항 산술 연산자
(피연산자가 2개)
+, -, *, /, % 사칙연산, 나머지 X
단항 산술 연산자
(피연산자가 1개)
++, -- 증가, 감소
- 전위: 피연산자의 값을 먼저 증/감시킨후 다른 연산 수행
- 후위: 먼저 다른 연산을 수행후 피연산자 값을 증/감시킴
O
+ 효과 없음
- 숫자 타입이 아닌 피연산자에 사용시 숫자 타입으로 변환하여 반환 (부수효과 X)
X
- 양/음수 부호 반전
- 숫자 타입이 아닌 피연산자에 사용시 숫자 타입으로 변환하여 반환 (부수효과 X)
X
문자열 연결 연산자 + - 피연산자 중 하나라도 문자열일 경우
- 암묵적 타입 변환(타입 강제 변환)일어남
 
할당 연산자
- 우항의 평가 결과를 좌항의 변수에 할당
- 할당문은 표현식인 문이다. (할당된 값으로 평가되며 다른 변수에 할당할 수도 있다, 연쇄 할당도 가능)
= 예) x = 5 O
+=, -=, *=, /=, %= 예) x += 5
동일표현) x = x + 5
O
비교 연산자 동등 비교 연산자 == 좌, 우항의 피연산자가 값이 같음
- 암묵적 타입 변환으로 타입을 일치 시킨 후 비교
X
일치 비교 연산자 === 좌, 우항의 피연산자가 값과 타입이 같음 X
부동등 비교 연산자 != 좌, 우항의 피연산자가 값이 다름
- 암묵적 타입 변환으로 타입을 일치 시킨 후 비교
X
불일치 비교 연산자 !== 좌, 우항의 피연산자가 값과 타입이 같음 X
*주의사항 NaN : 자기 자신과 일치하지 않는 유일한 값 (NaN === NaN //false)
- Number.isNaN()으로 NaN인지 확인 가능
숫자 0 의 양음을 비교하면 true를 반환한다.
대소 관계 비교 연산자 >, <, >=, <= 좌항이 우항보다 크다 / 작다/ 크거나 같다 / 작거나 같다. X
삼항 조건 연산자 조건식 ? true일때 반환 값 : false일때 반환 값 - 표현식으로 변수에 할당 가능 (if...else와의 차이점)
- 조건식은 불리언 값으로 암묵적 타입 변환됨
X
논리 연산자 || 논리합(OR)
- 평가 결과는 불리언 값이 아닐 수 있음
X
&& 논리곱(AND)
- 평가 결과는 불리언 값이 아닐 수 있음
X
! 부정(NOT)
- 항상 boolean 값 반환
X
쉼표 연산자   , 왼쪽부터 평가하고 마지막 평가 결과를 반환  
그룹 연산자   () 자신의 피연산자인 표현식을 가장 먼저 평가함  
typeof 연산자   typeof 피연산자의 데이터 타입을 문자열로 반환
(number, boolean, undefined, symbol, object, function)
*주의
typeof function //function
typeof null //object
- null인지 확인을 위해서는 ===를 이용할 것
(foo === null)
- 선언하지 않은 식별자는 undefined 반환됨
 
지수 연산자   ** 좌항을 밑으로 우항을 지수로 거듭 제곱하여 숫자 값을 반환
- Math.pow보다 가독성 우수
- 우결합성을 가짐 (결합순서가 우항에서 좌항으로)
- 음수를 밑으로 사용하려면 괄호로 묶어야 함
(ex. (-5) ** 2)
 
기타 ?. , ??, delete, new, instanceof, in

* 부수효과
O: 피연산자 바뀜
X: 피연산자 안바뀜, 새로운 값 생성됨

부수효과는 다른 코드에 영향을 주는 효과가 있는 것으로, 할당 연산자(=), 증가/감소 연산자(++/--), delete연산자는 부수효과가 있다.

 

연산자 우선순위와 결합 순서

연산자 우선순위: 연산자가 실행되는 순서

- () : 가장 우선순위 높음

- ** : 이항 연산자중 우선순위 가장 높음

- 그룹연산자로 명시적으로 조절하는 것을 권장함

 

결합순서

- 어느 쪽부터 평가를 수행할 것인지를 나타내는 순서

- 좌항-> 우항: +, -, /, %, <, <=, >, >=, ||, &&, ., [], (), ??, ?., in, instanceof

- 우항 -> 좌항: ++, --, 할당연산자, !x, +x, -x, ++x, --x, typeof, delete, ? ... : ..., **

 

 

 


References...

1) 모던 자바스크립트 Deep Dive, 이웅모, 위키북스

2) https://poiemaweb.com/

댓글