연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산등을 수행하여 하나의 값으로 만든다.
산술연산자
산술영ㄴ산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다.
산술연산이 안되는 경우 NaN을 반환한다.
이항산술연산자
이항 산술연산자는 2개의 피연산자를 산술연산하여 숫자값을 만든다.
모든 이항 산술 연산자는 피연산자의 값을 변경하는 부수효과가 없다.
피연산자는 절대 바뀌지 않는다. 새로운 값을 만들뿐이다.
+,-,x,/,%이다.
단항산술연산자
단항 산술연산자는 1개의 피연산자를 산술연산하여 숫자값을 만든다.
++ | 1증가 | 부수효과 있음 |
---|---|---|
— | 1감소 | 부수효과있음 |
+ | 효과 없음(숫자 타입으로 변경(새로 생성)하여 반환) | |
- | 음수를 양수로, 양수를 음수로 반전한다. |
부수효과가 있다는 것은 암묵적 재할당이 이뤄진다는 것이다.
++(—)가 피연산자 앞에 오는 경우에 먼저 증가(감소) 시키고, 다른 연산을 수행한다.
뒤에 오는 경우는 연산을 수행한 후에 값을 증가(감소)시킨다.
문자열 연결 연산자(암묵적 타입 변환, 타입 강제변환)
+연산자는 피연산자 중 하나 이상이 문자열인경우, 문자열 연결 연산자로 동작한다.
console.log(1 + '2'); //12
console.log(1 + true); // 2
console.log(1 + false); //1
console.log(1 * false); //0
console.log(1 * null); //0
console.log(1 + undefined); //NaN
여기서 true, false, null 이 각각 1, 0, 0 으로 타입 변환되는 것을 볼 수 있다. 이를 암묵적 타입변환, 타입 강제 변환이라고 한다.
할당연산자
우항에 있는 피연산자를 좌항의변수에 할당한다.
= | x=5 | x=5 | 부수효과있음 |
---|---|---|---|
+= | x+=5 | x=x+5 | 부수효과있음 |
-= | x-=5 | x=x-5 | 부수효과있음 |
*= | x*=5 | x=x*5 | 부수효과있음 |
/= | x/=5 | x=x/5 | 부수효과있음 |
%/ | x%/5 | x=x%5 | 부수효과있음 |
할당문은 표현식인 문으로서, 할당된 값으로 평가된다.
그래서 연속적인 연쇄할당이 가능한 것이다.
var a,b,c,d;
a=b=c=d=10;
비교연산자
좌항과 우항의 피연산자를 비교한 후, 그 결과를 불리언 값으로 반환한다.
동등/일치 비교 연사낮
동등은 느슨한 비교, 일치는 엄격한 비교를 함
== | 동등비교 | 값이 같음 |
---|---|---|
=== | 일치비교 | 값과 타입이 같음 |
≠ | 부동등비교 | 값이 다름 |
≠= | 불일치비교 | 값과 타입이 다름 |
동등 비교, 부동등비교 연산자는 암묵적인 타입변환을 통해 타입을 일치시킨 후 같은 값인지를 비교한다.
console.log(5 == '5'); //true
console.log(5 != '5'); //false
그래서 어떤 값이 나올지 정확하게 예측하기 어렵다는 단점이 있다.
console.log('0' == ''); //false
console.log('' == 0); //true
console.log(null == false); //false
console.log(false == undefined); //false
일치비교 연산자는 값과 타입이 모두 같아야 true를 반환한다. 즉, 암묵적 타입 변환이 없다.
대소관계 비교 연산자
두개의 피연산자의 크기를 비교하여 불리언 값을 반환한다.
부수효과는 없다.
삼항연산자
조건식의 평가 결과에 따라 반환할 값을 결정한다.
조건식은 불리언 타입으로, 평가될 표현식이다. 값이 불리언이 아니면 불리언으로 암묵적 변환이 이뤄진다.
참일경우 : 앞의 피연산자가 평가되어 반환되고, 거짓인경우 : 뒤의 피연산자가 평가되어 반환된다.
논리연산자
|| 논리합
&& 논리곱
! 부정
부정연산자
부정 연산자는 언제나 불리언 값을 반환한다.
피연산자가 불리언 값이 아니면 불리언 타입으로 암묵적 형변환한다.
논리곱, 논리합
이 둘은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다.
'Cat' && 'Dog'; //'Dog'
쉼표연산자
쉼표연산자는 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다.
그룹연산자
소괄호로 피연산자를 감싸는 그룹연산자는 자신의 피연산자인 표현식을 가장 먼저 평가한다.
그룹연산자는 우선순위가 가장 높다.
typeof 연산자
typeof 는 문자열을 반환하며 그종류는
string, number, boolean, function, symbol, undefined, object이다.
null은 반환하지 않으며, typeof null은 object를 반환한다.
null을 검사할 땐 일치 연산자를 사용하자.
지수연산자
ES7에서 도입된 지수연산자는 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭제곱하여 숫자를 반환한다.
지수연산자는 다른 이항연산자들보다 우선순위가 높다.
그외
?. | 옵셔널 체이닝 |
---|---|
?? | null 병합연산자 |
delete | 오브젝트 프로퍼티 삭제 |
new | 생성자 함수 호출하여 인스턴스 생성 |
instance of | 좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별 |
in | 프로퍼티 존재 확인 |
연산자 우선순위
1 | () |
---|---|
2 | new(매개변수 존재), . , [](프로퍼티 접근), ()(함수호출), ?. |
3 | new(매개변수 미존재) |
4 | x++, x— |
5 | !x,+x,-x,++x,—x, typeof, delete |
6 | ** |
7 | *,/,% |
8 | +,- |
9 | <,≤,>,≥,in, instanceof |
10 | ==,≠,===,≠= |
11 | ?? |
12 | && |
13 | |
14 | ? …:… |
15 | 할당연산자 |
16 | , |