오늘 읽은 범위 : 7장 연산자 (74p ~ 92p)
날짜 : 2023.11.3 ~ 11.4
📂 목차
1. 산술 연산자
2. 할당 연산자
3. 비교 연산자
4. 삼항 조건 연산자
5. 논리 연산자
6. 쉼표 연산자
7. 그룹 연산자
8. typeof 연산자
9. 지수 연산자
10. 그 외의 연산자
11. 연산자의 부수 효과
12. 연산자 우선순위
13. 연산자 결합 순서
연산자
- 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다.
- 이때 연산의 대상을
피연산자
라 한다.
- 피연산자는 값으로 평가될 수 있는 표현식이어야 한다.
- 피연산자와 연산자의 조합으로 이뤄진 연산자 표현식도 값으로 평가될 수 있는 표현식이다.
- 피연산자가 "값"이라는 명사의 역할을 한다면 연산자는 "피연산자를 연산하여 새로운 값을 만든다"라는 동사의 역할을 한다고 볼 수 있다.
- 피연산자는 연산의 대상이 되어야 하므로 값으로 평가할 수 있어야 한다.
- 연산자는 값으로 평가된 피연산자를 연산해 새로운 값을 만든다.
산술 연산자
산술 연산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다.
- 산술 연산이 불가능한 경우, NaN을 반환한다.
- 산술 연산자는 피연산자의 개수에 따라 이항 산술 연산자와 단항 산술 연산자로 구분할 수 있다.
이항 산술 연산자
이항 산술 연산자는 2개의 피연산자를 산술 연산하여 숫자 값을 만든다.
- 모든 이항 산술 연산자는 피연산자의 값을 변경하는 부수 효과가 없다.
- 어떤 산술 연산을해도 피연산자의 값이 바뀌는 경우는 없고 언제나 새로운 값을 만들 뿐이다.
이항 산술 연산자 | 의미 | 부수 효과 |
---|
+ | 덧셈 | X |
- | 뺄셈 | X |
* | 곱셈 | X |
/ | 나눗셈 | X |
% | 나머지 | X |
5 + 2; -> 7
5 - 2; -> 3
5 * 2; -> 10
5 / 2; -> 2.5
5 % 2; -> 1
단항 산술 연산자
단항 산술 연산자는 1개의 피연산자를 산술 연산하여 숫자 값을 만든다.
단항 산술 연산자 | 의미 | 부수 효과 |
---|
++ | 증가 | O |
-- | 감소 | O |
+ | 어떠한 효과도 없다. 음수를 양수로 반전하지도 않는다. | X |
- | 양수를 음수로, 음수를 양수로 값을 반환한다. | X |
주의할 점은 이항 산술 연산자와는 달리 증감/감소 (++/--) 연산자는 피연산자의 값을 변경하는 부수 효과가 있다
는 것이다.
- 다시 말해, 증감/감소 연산을 하면 피연산자의 값을 변경하는 암묵적 할당이 이뤄진다.
var x = 1;
x++;
console.log(x);
x--;
console.log(x);
문자열 연결 연산자
+ 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
그 외의 경우는 산술 연산자로 동작한다.
'1' + 2;
1 + '2'
1 + 2;
1 + true;
1 + false;
1 + null;
+undefined;
1 + undefined;
이를 암묵적 타입 변환
또는 타입 강제 변환
이라고 한다.
할당 연산자
할당 연산자는 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.
할당 연산자 | 예 | 동일 표현 | 부수 효과 |
---|
= | x = 5 | x = 5 | |
+= | 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 |
비교 연산자
비교 연산자는 좌할과 우항의 피연사를 비교한 다음 그 결과를 불리언 값으로 반환한다.
- 비교 연산자는
if 문
이나 for 문
과 같은 제어문의 조건식에서 주로 사용한다.
동등/일치 비교 연산자
동등 비교 연산자와 일치 비교 연산자는 좌항과 우힝의 피연산자가 같은 값으로 평가되는지 비교해 불리언 값을 반환한다.
- 하지만 비교하는 엄격성의 정도가 다르다.
- 동등 비교 연산자는 느슨한 비교를 하지만 일치 비교 연산자는 엄격한 비교를 한다.
비교 연산자 | 의미 | 사례 | 설명 | 부수 효과 |
---|
== | 동등 비교 | x == y | x와 y의 값이 같음 | X |
=== | 일치 비교 | x === y | x와 y의 값과 타입이 같음 | X |
!= | 부동등 비교 | x != y | x와 y의 값이 다름 | X |
!== | 부일치 비교 | x !== y | x와 y의 값과 타입이 다름 | X |
대소 관계 비교 연산자
대소 관계 비교 연산자는 피연산자의 크기를 비교하여 불리언 값을 반환한다.
대소 관계 비교 연산자 | 예제 | 설명 | 부수 효과 |
---|
> | x > y | x가 y보다 크다. | X |
< | x < y | x가 y보다 작다. | X |
>= | x >= y | x가 y보다 크거나 같다. | X |
<= | x <= y | x가 y보다 작거나 같다. | X |
삼항 조건 연산자
삼항 조건 연산자는 조건식의 평가 결과에 따라 반환할 값을 결정한다.
- 자바스크립트의 유일한 삼항 연산자이며, 부수 효과는 없다.
var x = 2, result;
if (x % 2) {
return result = '홀수'
} else {
return result = '짝수'
};
console.log(result);
var result = x % 2 ? '홀수' : '짝수';
console.log(result);
논리 연산자
논리 연산자는 우항과 좌항의 피연산자 (부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산한다.
논리 연산자 | 의미 | 부수 효과 |
---|
|| | 논리합(OR) | X |
&& | 논리곱(AND) | X |
! | 부정(NOT) | X |
true || true;
true || false;
false || true;
false || false;
true && true;
true && false;
false && true;
false && false;
!true;
!false;
!0;
!'Hello';
쉼표 연산자
쉼표(,
) 연산자는 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다.
var x, y, z;
x = 1, y = 2, z = 3;
그룹 연산자
소괄호('()'
)로 피연산자를 감싸는 그룹 연산자는 자신의 피연산자인 표현식을 가장 먼저 평가한다.
- 따라서 그룹 연산자를 사용하면 연산자의 우선순위를 조절할 수 있다.
10 * 2 + 3;
10 * (2 + 3);
typeof 연산자
typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환한다.
- typeof 연산자는 7가지 문자열
"string"
, "number"
, "boolean"
, "undefined"
, "symbol"
, "object"
, "function"
중 하나를 반환한다.
typeof ''
typeof 1
typeof NaN
typeof true
typeof undefined
typeof symbol()
typeof null
typeof []
typeof {}
typeof new Date()
typeof /test/gi
typeof function () {}
var foo = null;
typeof foo === null;
foo === null;
지수 연산자
ES7에서 도입된 지수 연산자는 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환한다.
2 ** 2;
2 ** 2.5;
2 ** 0;
2 ** -2;
Math.pow(2, 2);
Math.pow(2, 2.5);
Math.pow(2, 0);
Math.pow(2, -2);
-5 ** 2;
(-5) ** 2;
그 외의 연산자
연산자 | 개요 |
---|
?. | 옵셔널 체이닝 연산자 |
?? | null 병합 연산자 |
delete | 프로퍼티 삭제 |
new | 생성자 함수 호출할 때 사용하여 인스턴스 생성 |
instaneof | 좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별 |
in | 프로퍼티 존재 확인 |
연산자의 부수 효과
대부분의 연산자는 다른 코드에 영향을 주지 않는다.
var x;
x = 1;
console.log(x);
x++;
console.log(x);
var o = { a : 1 };
delete o.a;
console.log(o);
연산자 우선순위
우선순위 | 연산자 |
---|
1 | () |
2 | new(매개변수 존재) , . , [](프로퍼티 접근) , ()(함수호출) , ?.(옵션 체이닝 연산자) |
3 | new(매개변수 미존재) |
4 | x++ , x-- |
5 | !x , +x , -x , ++x , --x , typeof , delete |
6 | **(이항 연산자 중에서 우선순위가 가장 높다.) |
7 | * , / , % |
8 | + , - |
9 | < , <= , > , >= , in , instanceof |
10 | == , != , === , !== |
11 | ??(null 병합 연산자) |
12 | && |
13 | || |
14 | ? ... : ... |
15 | 할당 연산자(=, +=, -=, ...) |
16 | , |
연산자 결합 순서
결합순서 | 연산자 |
---|
좌항 -> 우항 | + , - , / , % , < , <= , > , >= , && , || , . , [] , () , ?? , ?. , in , instanceof |
우항 -> 좌항 | ++ , -- , 할당 연산자(=, +=, -=, ...) , !x , +x , -x , ++x , --x , typeof , delete , ? ... : ... , ** |