연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만듦
연산의 대상인 피연산자는 값으로 평가될 수 있는 표현식이어야함
-> 피연산자 & 연산자 조합으로 이뤄진 연산자 표현식도 가능
+, -, *, / % 가 있음
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 연산자
여러 개의 연산자로 이뤄진 문이 실행될 때 연산자가 실행되는 순서
이외에도 더 있지만 종류가 많으니, 연산자 우선순위가 가장 높은 그룹 연산자를 사용하는 것을 추천함
연산자의 어느 쪽(좌항 또는 우항)부터 평가를 수행할 것인지를 나타내는 순서