연산자란?
연산자: 하나 이상의 표현식을 대상으로 다양한 연산을 수행하여 하나의 값을 만드는 것
- 피연산자: 연산의 대상, 표현식이여야 함(값으로 평가될 수 있는)
- 연산자 표현식도 값으로 표현될 수 있는 표현식이여야 함
다양한 연산자
대분류 | 중분류 | 연산자 | 의미 | 부수효과* |
산술 연산자 - 수학적 계산을 수행하여 새로운 값 생성 - 불가능할 경우 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, 이웅모, 위키북스
'JavaScript > 모던자바스크립트 Deep Dive 스터디' 카테고리의 다른 글
[모던JS DeepDive] 6장 데이터 타입 (0) | 2023.01.03 |
---|---|
[모던JS DeepDive] 5장 표현식과 문 (0) | 2023.01.03 |
[모던JS DeepDive] 4장 변수 (0) | 2023.01.03 |
[모던JS DeepDive] 2장 자바스크립트란? (2) | 2023.01.02 |
[모던JS DeepDive] 1장 프로그래밍 (0) | 2023.01.02 |
댓글