연산자란
연산자는 하나 이상의 표션식을 대상으로 산술,할당,비교,논리,타입,지수연산등을 하나의 값으로 만드는작업을 수행한다.
연산자는 피연산자를 연산하여 새로운 값을 만드는데 피연산자는 값으로 평가될 수 있는 표현식이여야한다.
연산자의 부수효과
대부분의 연산자는 다른 코드에 영향을 주지않으나 일부 연산자는 다른 코드에 영향을 주는 부수효과를 가지고 있다.
대표적으로 부수효과가 있는 연산자는 할당 연산자(=), 증감연산자(++/--),delete연산자가있다.
연산자 |
예시 |
= |
변수 값이 변하는 부수효과가있으며, 변수를 사용하는 다른 코드에 영향을 준다. |
++/-- |
피연산자의 값을 재할당하여 변수를 사용하는 다른코드에 영향을 준다. |
delete |
객체의 프로퍼티를 삭제하는 부수효과가있다.객체를 사용하는 다른코드에 영향을 준다. |
1. 산술 연산자
산술 연산자는 학적 계산을 수행해 피연산자를 새로운 숫자 값으로 만드는 연산자이다.
산술 연산이 불가능한 경우 NaN을 반환한다.
산술연산자에는 단항 산술 연산자와 이항 산술 연산자가 있다.
단항 산술 연산자
- 1개의 피연산자를 산술연산하여 숫자 값을 만든다.
단항 산술 연산자 |
설명 |
부수효과 |
++ |
증가 |
O |
-- |
김소 |
O |
+ |
효과 x |
X |
- |
양수를 음수로, 음수르 양수로 반전한 값을 반환 |
X |
- 전위 증감 연산자: ++/--가 피연산자 앞에위치한 경우로 먼저 피연산자의 값을 증가/감소한 수 다른 연산을 수행한다.
- 후위 증감 연산자: 다른 연산을 먼저 수행한 후 피연산자의 값을 증가/감소 시킨다.
이항 산술 연산자
- 2개의 피연산자를 산술 연산하여 숫자값을 만들다.
- 부수효과가없고 항상 새로운 값을 만든다.
이항 산술 연산자 |
설명 |
+ |
덧셈 |
- |
뺄셈 |
* |
곱셈 |
/ |
나눗셈 |
% |
나머지 |
2. 할당 연산자
- 우팡에있는 피연산자의 평가 결과를 좌항의 변수에 할당한다.
- 값을 할당하므로 변수 값이 변하는 부수효과를 가진다.
할당 연산자 |
예 |
설명 |
= |
x=5 |
|
+= |
x += 5 |
|
-= |
x -= 5 |
|
*= |
x *= 5 |
|
/= |
x /= 5 |
|
%= |
x %=. 5 |
|
3. 비교 연산자
- 좌항과 우항의 피연산자를 비교하고 결과값을 불리언으로 반환한다.
- 부수효과는 없다.
동등/일치 비교 연산자
비교 연산자 |
이름 |
설명 |
== |
동등 비교 |
좌항과 우항의 값이 같다 |
=== |
일치 비교 |
좌항과 우항의 타입이 같다 |
!= |
부동등 비교 |
좌항과 우항의 값이 다르다 |
!== |
불일치 비교 |
좌항과 우항의 타입이 다르다 |
대소관계 비교 연산자
- 피연산자의 크기를 비교하여 불리언 값을 반환한다.
대소 비교 연산자 |
설명 |
> |
좌항이 우항보다 크다 |
< |
좌항이 우항보다 작다 |
>= |
좌항이 우항보다 크거나 같다 |
<= |
좌항이 우항보다 작거나 같다 |
4. 삼항 조건 연산자
- 조건식의 평가 결과에 따라 반환할 값을 경정한다.
조건식 ? 조건식이 true일때 반환할 값 : 조건식이 false일때 반환할 값
첫번째 피연산자가 true로 평가되면 두번째 피연산자를 반환하고, false로 평가되면 세번째 피연산자를 반환한다.
즉, 삼항조건 연산자는 두번째 피연산자 또는 세번째 피연산자로 평가되는 표현식이다.
- 삼항조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다.
- 삼항조건 연산자의 첫번째 피연산자는 조건식이므로 조건문이디때문에 if..else 문과 유사하게 처리할 수 있다.
- 차이점은 삼항조건 표현식은 값처럼 사용할 수 있으나 if..else문은 표현식이 아닌 문이기 때문에 값처럼 사용할 수 없다.
5. 논리 연산자
논리연산자 |
이름 |
|| |
논리합(OR) |
&& |
논리곱(AND) |
! |
부정(NOT) |
6. 쉼표 연산자
-왼쪽의 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다.
7. 그룹 연산자
- 소괄호로 피연산자를 감싼 그룹을 우선적으로 평가한다.
- 연산자의 우선순위를 조절 할 수 있으며, 연산순위가 가장 높다.
8. typeof 연산자
- 피연산자의 데이터타입을 문자열로 반환한다.
- string, nuumber, boolean, undefined, symbol, object, function 의 7가지중 하나로 반환한다.
- null은 반환하지 않는다. typeof로 null을 연산해보면 object를 반환하는데 이것은 자바스크립트의 버그이다. null에는 ===(일치연산자)를 사용해야한다.
- 선언하지 않은 식별자를 typeof로 연산하면 참조에러가 아닌 undefined를 반환한다.
9. 지수 연산자
- ES7에서 도입된 연산자로, 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 사용하여 거듭제곱하여 숫자값을 반환한다.
- 이항 연산자 중에서 우선순위가 제일 높다.
2 ** 2 //4
2 ** 3 //8
2 ** -2//0.25
(-2) ** 2 //음수를 거듭제곱하려면 괄호로 묶어야한다. 아니면 신텍스 에러가 뜬다.
10. 그 외의 연산자
연산자 |
이름 |
?. |
옵셔널 체이닝 연산자 |
?? |
null 병합 연산자 |
delete |
프로퍼티 삭제 |
new |
생성자 함수 호출시 생성자 함수와 연결된 인스턴스인지 판별 |
instanceof |
좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별 |
in |
프로퍼티의 존재 확인 |
연산자 우선순위
- 연산자가 복합적으로 이루어졌을때 어떤 연산자가 우선실행되는지의 순서이다.
우선순위 |
연산자 |
1 |
() |
2 |
new(메개변수 존재O), [].(), ?. |
2 |
new(매개변수 존재X) |
4 |
x++, x-- |
5 |
!x, +x, -x, ++x, --xx, typeof, delete |
6 |
**(이상연산자중 최상위) |
7 |
*, /, % |
8 |
+, - |
9 |
<, <=, >, >=, in, instanceof |
10 |
==, !=, ===, !== |
11 |
??(null 병합연산자) |
12 |
&& |
13 |
|| |
14 |
? ... : ... |
15 |
할당 연산자 |
16 |
, |
연산자 결합순서
- 연산자의 왼쪽부터 평가할지 오른쪽부터 평가할지를 나타내는 순서를 말한다.
| 결합순서 | 연산자 |
| :------: | :-------------------------------------------------------------------------: | --- | ------------------------------------ |
| 좌 -> 우 | +, -, /, <, <=, >, >=, &&, | | , ., [], (), ??, ?., in, insteanceof |
| 우 -> 좌 | ++, --, 할당연산자, !x, +x, -x, ++x, --x, typeof, delete, ? ... : ..., ** |