주의할 점은 이항 산술 연산자와는 달리 증가/감소(++/—) 연산자는 피연산자의 값을 변경하는 부수효과가 있다.
// [예제 07-03]
var x = 1;
// ++ 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이뤄진다.
x++; // x = x + 1;
console.log(x); // 2
// -- 연산자는 피연산자의 값은 변경하는 암묵적 할당이 이뤄진다.
x--; // x = x - 1;
console.log(x); // 1
증가/감소 (++/--) 연산자는 위치에 의미가 있다.
피연산자 앞에 위치한 전위 증가/감소 연산자(prefix increment/decrement operator는 먼저 피연산자의 값을 증가/감소시킨 후 다른 연산을 수행한다. (먼저 더한 값을 계산한다.)
피연산자 뒤에 위치한 후위 증가/감소 연산자(postfix increment/decrement operator)는 먼저 다른 연산을 수행한 후, 피 연산자의 값을 증가/ 감소 시킨다. (사용한 후 값을 더한다.)
// [예제 07-04]
var x = 5, result;
// 선할당 후증가(postfix increment operator)
result = x++;
console.log(result, x); // 5 6
// 선증가 후할당(prefix increment operator)
result = ++x;
console.log(result, x); // 7 7
// 선할당 후감소(postfix decrement operator)
result = x--;
console.log(result, x); // 7 6
// 선감소 후할당(prefix decrement operator)
result = --x;
console.log(result, x); // 5 5
‘+’ 단항 연산자는 피연산자에 어떠한 효과도 없다. 음수를 양수로 반전하지도 않는다.
// [예제 07-05]
+10; // => 10
+(-10) // => -10
// [예제 07-06]
var x = '1';
// 문자열을 숫자로 타입 변환한다.
console.log(+x);
// 부수 효과는 없다.
console.log(x); // "1"
// 불리언 값을 숫자로 타입 변환한다.
x = true;
console.log(+x); // 1
// 부수 효과는 없다.
console.log(x); // true
// 불리언 값을 숫자로 타입 변환한다.
x = false;
console.log(+x); // 0
// 부수 효과는 없다.
console.log(x); // false
// 문자열을 숫자로 타입 변환할 수 없으므로 NaN을 반환한다.
x = 'Hello';
console.log(+x); // NaN
// 부수 효과는 없다.
console.log(x); // "Hello"
‘-’ 단항 연산자는 피연산자의 부호를 반전한 값을 반환한다. ‘+’ 단항 연산자와 마찬가지로 숫자타입이 아닌 피연산자에 사용하면 숫자 타입으로 변환하여 반환한다.
// [예제 07-06]
// 부호를 반전한다
-(-10); // => 10
// 문자열을 숫자로 타입 변환한다.
-'10'; // => -10
// 불리언 값을 숫자로 타입 변환한다.
-true; // => 1
// 문자열은 숫자로 타입 변환할 수 없으므로 NaN을 반환한다.
-'Hello'; // => NaN
1.3 문자열 연결 연산자
‘+’ 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다. 그 외의 경우는 산술 연산자로 동작한다.
// [예제 07-08]
'1' + 2; // => 12
1 + '2'; // => 12
// 산술 연산자
1 + 2; // => 3
// true는 1로 타입 변환된다.
1 + true; // => 2
// false는 0으로 타입 변환된다.
1 + false; // => 0
// null은 0을 타입 변환된다.
1 + null; // => 1
// undefined는 숫자로 타입 변환되지 않는다.
+undefined; // => NaN
1 + undefined; // => NaN
2. 할당 연산자
할당 연산자
예
동일 표현
부수 효과
=
x = 5
x = 5
O
+=
x += 5
x = x + 5
O
-=
x -= 5
x = x - 5
O
*=
x *= 5
x = x * 5
O
/=
x /= 5
x = x / 5
O
%=
x %= 5
x = x % 5
O
// [예제 07-09]
x = 10;
console.log(x); // 10
x += 5; // x = x + 5;
console.log(x); // 15
x -= 5; // x = x - 5;
console.log(x); // 10
x *= 5; // x = x * 5;
console.log(x); // 50
x /= 5; // x = x / 5;
console.log(x); // 10
x %= 5; // x = x % 5;
console.log(x); // 0
// 문자열 연결 연산자
str += 'Lee'; // str = str + 'Lee'
console.log(str); // My name is Lee
3. 비교 연산자
3.1 동등 / 일치 비교 연산자
비교 연산자
의미
사례
설명
부수 효과
==
동등 비교
x == y
x와 y의 값이 같음
X
===
일치 비교
x === y
x와 y의 값과 타입이 다름
X
≠
부동등 비교
x ≠ y
x와 y의 값이 다름
X
≠=
불일치 비교
x ≠=y
x와 y의 타입이 다름
X
3.2 대소 관계 비교 연산자
대소 관계 비교 연산자
예제
설명
부수 효과
>
x > y
x가 y보다 크다
X
<
x < y
x가 y보다 작다
X
≥
x ≥ y
x가 y보다 크거나 같다
X
≤
x ≤ y
x가 y보다 작거나 같다
X
4, 삼항 조건 연산자
// [예제 07-24]
var x = 10;
// 삼항 조건 연산자 표현식은 표현식인 문이다. 따라서 값처럼 사용할 수 있다.
var result = x % 2 ? '홀수' : '짝수';
console.log(result); // 짝수
//[예제 07-40]
var x;
// 할당 연산자는 변수 값이 변하는 부수 효과가 있다. 이는 x 변수를 사용하는 다른 코드에
// 영향을 준다.
x = 1;
console.log(x); // 1
// 증가/감소 연산자(++/--)는 피 연산자의 값을 변경하는 부수 효과가 있다.
// 피연산자 x의 값이 재할당되어 변경된다. 이는 x 변수를 사용하는 다른 코드에 영향을 준다.
x++;
console.log(x); // 2
var o = { a: 1 };
// delete 연산자는 객체의 프로퍼티를 삭제하는 부수 효과가 있다. 이는 o 객체를 사용하는
// 다른 코드에 영향을 준다.
delete o.a;
console.log(o); // {}