연산자는 하나 이상의 표현식을 연산해 하나의 값을 만듭니다.
이 때 연산의 대상을 피연산자(operand)라고 합니다.
+, -, *, /, %, ** // binary arithmetic operator
++, --, +, - // unary arithmetic operator
=, +=, -=, /=, %=
'a' + 'b'; // 'ab'
'a' + 1; // 'a1'
'1' + 2; // '12'
=== // strict equality
!== // 값과 타입을 비교
== // loose equality
!= // 값 비교
<, >, <=, >= // 대소관계 비교 연산자
|| // 논리합(OR) 연산자
&& // 논리곱(AND) 연산자
! // 부정(NOT) 연산자
() // 그룹 연산자는 자신의 피연산자인 표현식을 가장 먼저 평가한다.
typeof '' // 'string'
typeof 1 // 'number'
typeof true // 'boolean'
typeof undefined // 'undefined'
typeof NaN // 'number'
typeof null // 'object'
typeof symbol() // 'symbol'
typeof [] // 'object'
typeof {} // 'object'
typeof function () {} // 'function'
// typeof 연산자는 값의 데이터 타입을 문자열로 반환합니다.
// 반환되는 값은 위와 같은 7가지 중 하나로 데이터 타입과 정확히 일치하지는 않습니다.
단축 평가란 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것이다.
false && anything // false
true && true // true
true && false // false
true && anything // anything
논리합 연산자는 좌항의 피연산자가 falsy이면 무조건 false를 반환한다.
그러나 좌항의 피연산자가 truthy이면 우항이 연산의 결과를 결정하며,
우항의 피연산자를 타입 변환하지 않고 그대로 반환한다.
true || anything // true
false || true // true
false || false // false
false || anything // anything
논리곱 연산자는 좌항의 피연산자가 truthy이면 무조건 true를 반환한다.
그러나 좌항의 피연산자가 falsy이면 우항이 연산의 결과를 결정하며,
우항의 피연산자를 타입 변환하지 않고 그대로 반환한다.