- 하나 이상의 expression (값으로 평가될 수 있는 statement) 을 대상으로 산술, 할당, 비교, 논리 등의 연산(operation) 을 수행해 하나의 값을 만드는 역할을 담당
- 이때 연산의 대상을 피연산자 (operand) 라고 한다.
- operand는 값으로 평가될 수 있어야한다.
연산자는 여러가지 종류가 있고 C,JAVA와 대부분 유사하다. 다만 몇가지 주의해야할 동작이 있다.
- 암묵적 타입 변환 (Implicit Coercion)
- 산술 연산자 (
+,-,*,/):+연산자는 피연산자 중 하나가 문자열이면 문자열 결합으로 동작- 예를 들어,
"1" + 2는 숫자 2가 문자열"2"로 변환되어"12"가 됩니다.
- 예를 들어,
-,*,** /등은 피연산자를 숫자로 변환- 예를 들어,
"5" - 2는 숫자 5로 변환되어3이 됩니다.
- 예를 들어,
- 단항 연산자 (
+,-):- 단항
+는 피연산자를 숫자로 변환합니다. 예를 들어+"3"은 숫자3이 됩니다.
- 단항
- 산술 연산자 (
- 동등 비교 연산자 (
==vs===)==는 비교 시 암묵적 타입 변환을 수행한다.- 예를 들어,
0 == "0"는true로 평가된다.
- 예를 들어,
===는 엄격한 비교로 타입 변환 없이 값과 타입이 모두 일치해야 한다.
- Falsy & Truthy 값
- 자바스크립트는 조건문에서 암묵적으로 타입 변환을 진행한다.
false,0,"",null,undefined,NaN은 falsy한 값으로 평가되며, 이 외의 값은 truthy하게 평가됩니다.
- 객체와 원시 값의 변환
- 객체를 문자열이나 숫자로 변환할 때
toString()혹은valueOf()메서드가 호출됩니다. - 이 과정에서 커스텀 객체는 의도와 다르게 동작할 수 있으므로, 명시적 변환이나 메서드 오버라이딩에 주의해야 합니다.
- 객체를 문자열이나 숫자로 변환할 때
- 특이 케이스
- 빈 배열(
[])과 객체의 결합: 예를 들어,[] + {}는"[object Object]"로 평가되고,{} + []는 의도와 다르게0으로 평가될 수 있습니다. null과undefined의 비교:null == undefined는true이지만,null === undefined는false입니다.
- 빈 배열(