[Study] JS DeepDive : 7. 연산자

sjoleee·2022년 10월 2일
0
post-thumbnail

모던 자바스크립트 Deep Dive 스터디

7. 연산자

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

7.1 산술 연산자

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

7.1.1 이항 산술 연산자

💡 2개의 피연산자를 산술 연산하여 숫자 값을 만든다. 피연산자의 값을 변경하는 부수효과가 없다.

이항 산술 연산자의 종류
덧셈(+) 뺄셈(-) 곱셉(*) 나눗셈(/) 나머지(%)

7.1.2 단항 산술 연산자

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

증가/감소 연산자(++/--)피연산자의 값을 변경하는 부수 효과가 있다.
증가/감소 연산을 하면 피연산자의 값을 변경하는 암묵적 할당이 이뤄진다.

  • 전위 증가/감소 연산자는 피연산자의 값을 증가/감소시킨 후 다른 연산을 수행한다.
  • 후위 증가/감소 다른 연산을 수행한 후, 피연산자의 값을 증가/감소시킨다.

+ 연산자는 피연선자에 어떠한 효과도 없다.
단, 숫자 타입이 아닌 피연산자에 +를 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.
- 연산자는 피연산자의 부호를 반전한 값을 반환한다.

둘 모두 피연산자를 변경하는 것은 아니고 새로운 값을 생성해 반환하므로 부수 효과는 없다.

7.1.3 문자열 연결 연산자

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

'1' + 2 = '12'와 같이 동작하는 것을 말한다.

단, true false null은 문자열이 아니다.
이들이 숫자와 + 연산을 할 경우, 숫자로 암묵적 타입 변환(타입 강제 변환)되어 연산하게 된다.
1 + true // 2 1 + false // 1 1 + null // 1

undefined는 숫자로 타입 변환되지 않는다.(산술 연산시 NaN 반환)

7.2 할당 연산자

💡 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.
좌항의 변수에 값을 할당하므로 변수 값이 변하는 부수 효과가 있다.

할당문은 값으로 평가되는 표현식인 문으로, 할당된 값으로 평가된다.
이러한 특징을 활용해 연쇄 할당이 가능하다. 오른쪽에서 왼쪽으로 진행된다.
a = b = c = 0

7.3 비교 연산자

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

7.3.1 동등/일치 비교 연산자

동등 비교 연산자(== !=)는 느슨한 비교 👉 암묵적 타입 변환을 통해 좌항, 우항의 피연산자 타입을 일치시긴 후 비교
일치 비교 연산자(=== !==)는 엄격한 비교

NaN자신과 일치하지 않는 유일한 값이다.
NaN === NaN // false
따라서 NaN인지 판별하기 위해서는 Number.isNaN을 사용한다.

0-0을 비교하면 true를 반환한다.

7.3.2 대소 관계 비교 연산자

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

7.4 삼항 조건 연산자

💡 조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값

삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다. 따라서 다른 표현식의 일부가 될 수 있다.

7.5 논리 연산자

💡 우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산한다.

논리 부정 연산자 !는 언제나 불리언 값을 반환한다.
피연산자가 불리언 값이 아니면 불리언 타입으로 암묵적 타입 변환된다.

논리합|| 논리곱&&은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다.

7.6 쉼표 연산자

💡 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다.
x = 1, y = 2, z = 3 // 3

7.7 그룹 연산자

💡 소괄호()로 피연산자를 감싸게 되면 소괄호 내부의 표현식을 가장 먼저 평가한다.

7.8 typeof 연산자

💡 피연산자의 데이터 타입을 문자열로 반환한다.

헷갈릴 수 있는 경우
typeof NaN // "number"
typeof undefined // "undefined"
typeof null // "object" 👉 자바스크립트 첫 번째 버전의 버그. 수정되지 못하고 있다.
typeof function(){} // "function"

선언한 적 없는 식별자를 typeof 연산자로 연산해 보면 undefined를 반환한다.

7.9 지수 연산자

💡 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환한다.
음수를 거듭제곱의 밑으로 사용하려면 괄호로 묶어야 한다.

profile
상조의 개발일지

0개의 댓글