
연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만듦
연산의 대상인 피연산자는 값으로 평가될 수 있는 표현식이어야함
-> 피연산자 & 연산자 조합으로 이뤄진 연산자 표현식도 가능
+, -, *, / % 가 있음
2개의 피연산자를 산술 연산하여 숫자 값을 만듦 -> 피연산자의 값이 바뀌지 않고, 항상 새로운 값을 생성
++, --, +, - 가 있음
1개의 피연산자를 산술 연산하여 숫자 값 생성 -> ++, --는 피연산자의 값을 변경함 (부수효과 존재)
=, +=, -=, *=, /=, %= 가 있음
우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당 -> 부수효과 존재
할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가됨
-> 할당문을 다른 변수에 할당할 수도 있음 => 여러 변수에 동일한 값을 연쇄 할당 가능
좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환
==(동등 비교), !=, ===(일치 비교), !== 가 있음
비교의 엄격성에서 차이 존재 ->
1. 동등 비교는 양 항을 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교
2. 일치 비교는 양 항이 타입과 값이 모두 일치하는지 비교
일치 비교에서 주의할 점
- NaN -> NaN 확인시 Number.isNaN 함수 사용
NaN === NaN // false Number.isNaN(NaN) // true
- 0 (0은 양수랑 음수랑 같음)
0 === -0 으로 처리됨
>, <, >=, <=가 있음
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값 형태로 사용함
if... else 문과 유사하게 처리하지만, 둘의 차이점 존재
=> 삼항 조건 연산자 표현식은 값처럼 사용 가능
if... else 문은 값처럼 사용 불가 (표현식이 아니라 문)
-> 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문
|| (논리합 OR), && (논리곱 AND), ! (부정 NOT) 가 있음
우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산
논리 부정(!) 연산자는 항상 불리언 값을 반환 -> 피연산자가 불리언 값이 아니면 불리언 타입으로 암묵적 타입 변환
논리합(||) 또는 논리곱(&&) 연산자 표현식의 평가 결과는 불리언 값이 아닐 수도 있음
왼쪽 피연산자부터 차례대로 피연산자를 평가, 마지막 피연산자의 평가가 끝나면 마지막 평가 결과 반환
소괄호()로 피연산자를 감싸는 것으로 연산자 우선순위가 가장 높음
피연산자의 데이터 타입을 문자열로 반환
"string", "number", "boolean", "symbol", "undefined", "object", "function" 의 종류가 있음
null을 연산하면 null을 연산함 -> 확인하려면 === 사용
좌항의 피연산자를 밑(base)으로, 우항의 피연산자를 지수(exponent)로 거듭 제곱해 숫자 값 반환 -> 이항 연산자 중 우선 순위가 가장 높음
**(지수 연산자)와 Math.pow는 같은 역할이지만, 가독성이 더 좋음
일부 연산자는 다른 코드에 영향을 주는 부수 효과가 있음
할당 연산자(=) , 증가/감소 연산자(++/--), delete 연산자
여러 개의 연산자로 이뤄진 문이 실행될 때 연산자가 실행되는 순서

이외에도 더 있지만 종류가 많으니, 연산자 우선순위가 가장 높은 그룹 연산자를 사용하는 것을 추천함
연산자의 어느 쪽(좌항 또는 우항)부터 평가를 수행할 것인지를 나타내는 순서