연산자(operator)는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산등을 수행해 하나의 값을 만든다.
피연산자(operand)는 연산의 대상이며, 값으로 평가될 수 있는 표현식이어야 한다.
산술 연산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 값을 만든다. (산술 연산이 불가능한 경우, NaN 반환)
이항 산술 연산자
+ - * / %)는 피연산자의 값을 변경하는 부수 효과가 없다. (새로운 값을 만들 뿐)단항 산술 연산자
++ / --) 연산자는 피연산자의 값을 변경하는 부수 효과가 있다. (위치에 따라 선할당 후증가, 선증가 후할당)+ 단항 연산자는 피연산자를 숫자 타입으로 변환하여 반환한다.- 단항 연산자는 숫자 타입 피연산자의 부호를 반전한 값을 반환한다. 문자열 연결 연산자
+ 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.//문자열 연결 연산자
'1' + 2; // '12'
1 + '2'; // '12'
//true는 1로 타입 변환
1 + true; // 2
//fasle는 0으로 타입 변환
1 + false; //1
//null은 0으로 타입 변환
1 + null; //1
//undefined는 숫자로 타입 변환되지 않는다.
+undefined; // NaN
1 + undefined; // NaN
할당 연산자는 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.
할당 연산자(= += -= *= /= %=)는 좌항의 변수에 값을 할당하므로 변수 값이 변하는 부수 효과가 있다.
비교 연산자는 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환한다.
동등/일치 비교 연산자
==) 연산자는 먼저 암묵적인 타입 변환을 통해 타입을 이치시킨 후 값은 값인지 비교한다. (같은 값일 수 있다면 true 반환) ⇒ 반대는 부동등 비교 연산자(!=)===) 연산자는 타입도 같고 값도 같은 경우에 한하여 true를 반환한다. ⇒ 반대는 불일치 비교 연산자(!==)❗ 주의 ❗
NaN === NaN; // false
NaN은 자신과 일치하지 않는 유일한 값이다.
숫자가 NaN인지 조사하려면 빌트인 함수 isNaN을 사용한다.isNaN(NaN); // true
0 === -0; // true 0 == -0; // true
양의 0과 음의 0의 일치 비교/동등 비교 결과는 모두 true이다.
대소 관계 비교 연산자
대소 관계 비교 연산자(> < >= <=)는 피연산자의 크기를 비료하여 불리언 값을 반환한다.
삼항 조건 연산자는 조건식의 평가 결과에 따라 반환할 값을 결정한다. (값으로 평가할 수 있는 표현식인 문)
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
논리 연산자(|| && !)는 우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산한다.
쉼표(,) 연산자는 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다.
var x, y, z;
x = 1, y = 2, z = 3; // 3
소괄호(())로 피연산자를 감싸는 그룹 연산자를 가장 먼저 평가한다. (우선순위 조절 가능)
그룹 연산자는 연산자 우선순위가 가장 높다.
10 * 2 + 3; // 23
//그룹 연산자를 사용하여 우선순위를 조절
10 * (2 + 3); // 50
typeof 연산자는 피연산자의 데이터 타입을 문자열(string, number, boolean, undefined, symbol, object, function) 중 하나를 반환한다.
null은 object로 반환하며, 함수의 경우 function을 반환한다.
ES7에 도입된 지수 연산자(**)는 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환한다.
지수 연산자는 이항 연산자 중에서 우선순위가 가장 높다.
2 ** 2; // 4
//지수 연산자가 도입되기 전
Math.pow(2, 2); //4
//음수의 경우 괄호로 묶어서 사용
(-5) ** 2; // 5