모던 자바스크립트 Deep Dive 스터디
연산자는 하나 이상의 값으로 표현될 수 있는 표현식(피연산자)을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다.
💡 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다. 산술 연산이 불가능한 경우
NaN
을 반환한다.
💡 2개의 피연산자를 산술 연산하여 숫자 값을 만든다. 피연산자의 값을 변경하는 부수효과가 없다.
이항 산술 연산자의 종류
덧셈(+)
뺄셈(-)
곱셉(*)
나눗셈(/)
나머지(%)
💡 1개의 피연산자를 산술 연산하여 숫자 값을 만든다.
증가/감소 연산자(++/--)는 피연산자의 값을 변경하는 부수 효과가 있다.
증가/감소 연산을 하면 피연산자의 값을 변경하는 암묵적 할당이 이뤄진다.
+ 연산자
는 피연선자에 어떠한 효과도 없다.
단, 숫자 타입이 아닌 피연산자에 +를 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.
- 연산자
는 피연산자의 부호를 반전한 값을 반환한다.
둘 모두 피연산자를 변경하는 것은 아니고 새로운 값을 생성해 반환하므로 부수 효과는 없다.
💡
+ 연산자
는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
'1' + 2 = '12'
와 같이 동작하는 것을 말한다.
단, true
false
null
은 문자열이 아니다.
이들이 숫자와 + 연산
을 할 경우, 숫자로 암묵적 타입 변환(타입 강제 변환)되어 연산하게 된다.
1 + true // 2
1 + false // 1
1 + null // 1
undefined
는 숫자로 타입 변환되지 않는다.(산술 연산시 NaN
반환)
💡 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.
좌항의 변수에 값을 할당하므로 변수 값이 변하는 부수 효과가 있다.
할당문은 값으로 평가되는 표현식인 문으로, 할당된 값으로 평가된다.
이러한 특징을 활용해 연쇄 할당이 가능하다. 오른쪽에서 왼쪽으로 진행된다.
a = b = c = 0
💡 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환한다.
동등 비교 연산자(==
!=
)는 느슨한 비교 👉 암묵적 타입 변환을 통해 좌항, 우항의 피연산자 타입을 일치시긴 후 비교
일치 비교 연산자(===
!==
)는 엄격한 비교
NaN
은 자신과 일치하지 않는 유일한 값이다.
NaN === NaN // false
따라서 NaN
인지 판별하기 위해서는 Number.isNaN
을 사용한다.
0
과 -0
을 비교하면 true
를 반환한다.
피연산자의 크기를 비교하여 불리언 값을 반환한다. <
>
<=
>=
💡 조건식 ? 조건식이
true
일 때 반환할 값 : 조건식이false
일 때 반환할 값
삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다. 따라서 다른 표현식의 일부가 될 수 있다.
💡 우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산한다.
논리 부정 연산자 !
는 언제나 불리언 값을 반환한다.
피연산자가 불리언 값이 아니면 불리언 타입으로 암묵적 타입 변환된다.
논리합||
논리곱&&
은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다.
💡 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환한다.
x = 1, y = 2, z = 3 // 3
💡 소괄호
()
로 피연산자를 감싸게 되면 소괄호 내부의 표현식을 가장 먼저 평가한다.
💡 피연산자의 데이터 타입을 문자열로 반환한다.
헷갈릴 수 있는 경우
typeof NaN // "number"
typeof undefined // "undefined"
typeof null // "object"
👉 자바스크립트 첫 번째 버전의 버그. 수정되지 못하고 있다.
typeof function(){} // "function"
선언한 적 없는 식별자를 typeof
연산자로 연산해 보면 undefined
를 반환한다.
💡 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환한다.
음수를 거듭제곱의 밑으로 사용하려면 괄호로 묶어야 한다.