Languages/JavaScript

[JavaScript] 연산자 (1)

개발자 나르 2022. 5. 25. 16:49
반응형

연산자

연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다.

안산의 대상을 피연산자라 부른다.

 

산술 연산자

피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다. 불가능한 경우, NaN을 반환한다.

 

이항 산술 연산자

2개의 피연산자를 산술 연산하여 숫자 값을 만든다.

이항 산술 연산자 의미 부수 효과
+ 덧셈 X
- 뺄셈 X
* 곱셈 X
/ 나눗셈 X
% 나머지 X

 

단항 산술 연산자

1개의 피연산자를 산술 연산하여 숫자 값을 만든다.

단항 산술 연산자 의미 부수 효과
++ 증가 O
-- 감소 O
+ 어떠한 효과도 없다. 음수를 양수로 반전하지도 않는다. X
- 양수를 음수로, 음수를 양수로 반전한 값을 반환한다. X

증가/감소(++/--) 연산자는 위치에 따라 의미가 다르다.

  • 피연산자 앞에 위치한 전위 증가/감소 연산자는 먼저 피연산자의 값을 증가/감소 시킨 후, 다른 연산을 수행한다.
  • 피연산자 뒤에 위치한 후위 증가/감소 연산자는 먼저 다른 연산을 수행한 후, 피연산자의 값을 증가/감소시킨다.
var x = 2, result;
result = x++; //선할당 후위증가
console.log(result , x); // 2,3
result = ++x; //선위증가, 후할당
console.log(result , x); // 4,4
result = x--; //선할당, 후위감소
console.log(result, x); // 4,3
result = --x; //후할당, 선위감소
console.log(result, x); // 2,2

숫자 타입이 아닌 피연산자에 +/-단항 연산자를 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.

피연산자의 타입이 변경하는것이 아니기 때문에 타입은 바뀌지 않고 변환된 값을 반환하는 것이다.

 

문자열 연결 연산자

+연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.

'1' + 1; // '11'
1 + '1'; // '11'
1 + true; // 2 (true는 1로 타입 변환된다)
1 + false; // 1 (false는 0으로 타입 변환된다)
1 + null; // 1 (null은 0으로 타입 변환 된다)
+undefined; // NaN
1 + undefined; // NaN

위의 예제를 보면 개발자의 의도와는 상관없이 암묵적으로 타입이 변환이 된다. 이걸 암묵적 타입 변환이라고 한다.

 

할당 연산자

할당 연산자는 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.

할당 연산자 동일 표현 부수 효과
= x = 2 x = 2 O
+= x += 2 x = x + 2 O
-= x -= 2 x = x - 2 O
*= x *= 2 x = x * 2 O
/= x /= 2 x = x / 2 O
%= x %= 2 x = x % 2 O

 

비교 연산자

비교 연산자는 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환한다.

 

동등/일치 비교 연산자

비교 연산자 의미 사례 설명 부수 효과
== 동등 비교 x == y x 와 y의 값이 같음 X
=== 일치 비교 x === y x 와 y의 값과 타입이 같음 X
!= 부동등 비교 x != y x와 y의 값이 다름 X
!== 불일치 비교 x !== y x와 y의 값과 타입이 다름 X

※동등 비교는 사용하면 안되는 이유※

5 == 5; // true
5 == '5'; // true 이유는 타입은 다르지만 암묵적 타입 변환을 통해 타입을 일치시키면 값이 같기 때문

이렇듯 문자열과 숫자를 동등 비교를 하더라도 암묵적 타입 변환을 통해 true를 반환하기 때문에 동등비교보다는 일치 비교를 사용해야한다.

NaN === NaN; // false (NaN은 자신과 일치하지 않는 유일한 값이다)
0 === -0; // true (양의 0과 음의 0은 동등비교나 일치 비교 둘 다 true를 반환한다.)
0 == -0; // true
// 그러므로 이와 같은 경우는 Object.is 라는 메서드를 활용해서 비교하여야 한다.
Object.is(-0, +0); // false
Object.is(NaN, NaN); // true

대소 관계 비교 연산자

피연산자의 크기를 비교하여 불리언 값을 반환한다.

대소 관계 비교 연산자 예제 설명 부수 효과
> x > y x가 y보다 크다 X
< x < y x가 y보다 작다 X
>= x >= y x가 y보다 크거나 같다 X
<= x <= y x가 y보다 작거나 같다 X
반응형