본문 바로가기
Programming/JavaScript

자바스크립트의 연산자

by IN.0 2020. 12. 14.
728x90
반응형

연산자를 알아보기 전에 먼저, 피연산자는 "값"이라고 할 수 있다.

우리는 피연산자를 연산하여 새로운 값을 만드는데, 그 역할을 하는 것을 연산자라고 한다.

자바스크립트가 제공하는 다양한 연산자를 살펴보자.


산술 연산자

산술 연산자에는 이항 산술 연산자, 단항 산술 연산자, 문자열 연결 연산자가 있다.

이항 산술 연산자는 2개의 피연산자를 산술 연산해 숫자 값을 만든다.

+, -, *, / 사칙연산과 %같은 나머지 연산자가 있다.

이항 산술 연산자는 피연산자의 값을 변경하지는 않는다.

단항 산술 연산자는 1개의 피연산자를 산술 연산해 숫자 값을 만든다.

++, --, +, -가 있으며, 피연산자의 값을 변경할 수 있다.

그리고 증가/감소(++, --) 연산자는 위치에 따라 값이 달라질 수 있다.

var a == 5++;
var b == ++5;
console.log(a); // 5
console.log(b); // 6

문자열 연결 연산자는 +를 사용하며, 피연산자 중에 하나 이상이 문자열인 경우

모든 피연산자를 문자열로 변환해 합친다.

var a = '1' + 234;
console.log(a); // '1234'

var b = '1' + true;
console.log(b); // '1true'

var c = 1 + true;
console.log(c); // 2

할당 연산자

할당 연산자는 산술 연산자를 응용하여 우항에 있는 피연산자를 좌항에 있는 변수에 할당하는 것이다.

따라서 변수의 값이 변하는 부수 효과가 있다.

var x = 10;
x += 5;
console.log(x); // 15

비교 연산자

비교에는 동등 비교와 일치 비교, 대소 관계 비교가 있다.

동등 비교 연산자는 ==를 사용하고, 일치 비교 연산자는 ===를 사용한다.

(부동등은 !=, 불일치는 !==)

동등 비교는 좌항과 우항을 비교할 때 암묵적 타입 변환을 통해 타입을 일치시킨 후 비교하기 때문에

예측이 어렵고 실수하기 쉽다.

5 == '5'; // true
5 === '5'; // false

그래서 비교 연산을 할 때에는 동등 비교보단 일치 비교를 사용하는 것이 좋다.

단, 일치 비교시 NaN 값은 자신과 일치하지 않기 때문에 주의해야 한다.

또한 -0과 +0을 구분하지 못한다.

NaN === NaN; // false
-0 === +0; // true

이 문제를 해결하는 메서드가 ES6에 등장했는데, Object.is() 메서드이다.

이 메서드는 두 값이 같은 값인지 일치 비교 연산자보다 더 정확하게 알려준다.

Object.is(-0, +0); // false
Object.is(NaN, NaN); // true

대소 관계 비교 연산자는 파이썬 문법과 동일하다.


삼항 조건 연산자

파이썬에도 삼항 연산자가 있지만 문법이 조금 다르다.

[참일때] if [조건] else [거짓일때] // 파이썬

[조건] ? [참일때] : [거짓일때]; // 자바스크립트

개인적으로 이 부분은 자바스크립트 문법이 더 직관적인 것 같다.

삼항 연산자와 if~else 문의 차이점?

- 삼항 연산자는 값처럼 쓸 수 있지만, if문은 값처럼 사용할 수 없다.

var x = 10;

var result = if (x % 2) { result = '홀수'; } else { result = '짝수'; }; // 에러

var result = x % 2 ? '홀수' : '짝수'; // result = '짝수'

따라서 조건에 따라 어떤 값을 결정해야 한다면 삼항 연산자가 유리하다.

단, 조건에 따라 수행해야 할 문이 하나가 아니라 여러 개면 if문을 쓰는 것이 가독성이 더 좋다.


논리 연산자

논리 연산자에는 논리합(OR)(||), 논리곱(AND)(&&), 부정(NOT)(!)이 있다.

논리 연산의 결과는 true나 false 외에 다른 값(2개의 피연산자 중 어느 한쪽)이 될 수 있는데,

이를 단축 평가라고 한다.

'cat' && 'dog'; // 'dog'

typeof 연산자

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

여기서 자바스크립트의 버그가 있는데, 바로 typeof null에서 object를 반환하는 것이다.

첫 버전에서 발생한 버그지만 기존 코드에 영향을 줄 수 있기 때문에 아직 수정되지 못하고 있다.

따라서 null을 확인할 때에는 typeof 대신 일치 연산자(===)를 사용하는 것이 좋다.


이 외에도 다양한 연산자가 있지만, 다른 포스팅에서 다룰 가능성이 있어 생략한다.

 

다음 포스트에서는 제어문에 대해 알아보자.

 

728x90
반응형

댓글