연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다.
: 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다.
var x = 1;
x++; // x = x + 1;
console.log(x); // 2
x--; // x = x - 1;
console.log(x); // 1
=> ++, -- 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이뤄진다.
var x = 5, result;
// 선할당 후증가
result = x++;
console.log(result, x); // 5 6
// 선증가 후할당
result = ++x;
console.log(result, x); // 7 7
// 선할당 후감소
result = x--;
console.log(result, x); // 7 6
// 선감소 후할당
result = --x;
console.log(result, x); // 5 5
x = true;
console.log(+x); // 1
console.log(x); // true
x = false;
console.log(+x); // 0
console.log(x); // false
x = 'Hello';
console.log(+x); // NaN, 문자열은 숫자로 타입 변환할 수 없다.
console.log(x); // "Hello"
-true; // -1
-'Hello'; // NaN
'1' + 2; // '12'
: 자바스크립트 엔진이 암묵적으로 타입을 강제 변환한 후 연산을 수행함
1 + true; // 2, true는 1로 타입 변환
1 + false; // 1, false는 0으로 타입 변환
1 + null; // 1, null은 0으로 타입 변환
: 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.
1. x = 5
2. x += 5 // x= x+5
3. x -= 5 // x= x-5
4. x *= 5 // x= x*5
5. x /= 5 // x= x/5
6. x %= 5 // x= x%5
여러 변수에 동일한 값을 연쇄 할당
var a, b, c;
a = b = c = 0;
console.log(a,b,c); // 0 0 0
: 좌항과 우항의 피연산자를 비교하여 그 결과를 불리언 값으로 반환한다.
동등 비교 연산자와 일치 비교 연산자는 좌항과 우항의 피연산자가 같은 값으로 평가되는지 비교해 불리언 값을 반환한다.
== : 동등 비교
!= : 부동등 비교
예시)
5 == '5'; // true
=== : 일치 비교
!== : 불일치 비교
예시)
5 === '5'; // false
0 === -0; // true, 양의 0과 음의 0을 같게 본다.
NaN === NaN; // false, NaN은 자신과 일치하지 않는 유일한 값이다.
Number.isNaN(NaN); // true
Number.isNaN(1+undefined); // true
** Number.isNaN 함수는 지정한 값이 NaN인지 확인하여 결과를 불리언 값으로 반환한다.
NaN 이나 0을 비교할 때 예측 가능한 정확한 비교 결과를 반환한다.
그 외에는 일치 비교 연산자(===)와 동일하게 동작한다.
Object.is(-0,+0); // false
Object.is(NaN,NaN); // true
: 피연산자의 크기를 비교하여 불리언 값을 반환한다.
대소 관계 비교 연산자: > , < , >= , <=
: 조건식의 평가 결과에 따라 반환할 값을 결정한다. 부수 효과는 없다.
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
var x = 2;
var result = x % 2 ? '홀수' : '짝수'; // 0 이 false로 암묵적 타입 변환 , 값처럼 사용할 수 있다.
console.log(result); // 짝수
// if ... else 문을 사용하여 유사하게 표현
if ( x % 2 ) result = '홀수';
else result = '짝수';
-> var result에 할당하여 값처럼 사용할 수 없다.
: 우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산한다.
|| : 논리합 (OR)
&& : 논리곱 (AND)
! : 부정 (NOT)
// 논리합(||) 연산자
true || true; // true
true || false; // true
false || true; // true
false || false; // false
// 논리곱(&&) 연산자
true && true; // true
true && false; // false
false && true; // false
false && false; // false
// 논리 부정(!) 연산자의 암묵적 타입 변환
!0; // true
!'Hello'; // false
// 단축 평가
'Cat' && 'Dog'; // 'Dog'
: 논리 연산에서 논리합은 논리곱과 부정기호로, 논리곱은 논리합과 부정기호로 표현할 수 있음을 가리키는 법칙
!(x || y) === (!x && !y)
!(x && y) === (!x || !y)