[JavaScript] 모던 자바스크립트 Deep Dive로 배우는 JS #7 연산자(1)

ChilihC·2022년 4월 10일
0
post-thumbnail

TIL(Today I Learned) 🧑🏻‍💻


7. 연산자(1)


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

  • 피연산자는 값으로 평가될 수 있는 표현식이어야 한다. 그리고 피연산자와 연산자의 조합으로 이뤄진 연산자 표현식도 값으로 평가될 수 있는 표현식이다.

7.1  산술 연산자

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

7.1.1  이항 산술 연산자

  • 이항(binary) 산술 연산자는 2개의 피연산자를 산술 연산하여 숫자 값을 만든다.

  • 이항 산술 연산을 하면 피연산자의 값이 바뀌는 경우는 없고 언제나 새로운 값을 만들 뿐이다.

  • 이항 산술 연산자 종류 : '+', '-', '*', '/', '%'

7.1.2  단항 산술 연산자

  • 단항(unary) 산술 연산자는 1개의 피연산자를 산술 연산하여 숫자 값을 만든다.

  • 단항 산술 연산자 종류: '++', '--', '+', '-'

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

    • 피연산자 앞에 위치한 이 연산자는 선 증가/감소 후. 다른 연산을 수행한다.

    • 피연산자 뒤에 위치한 이 연산자는 다른 연산을 수행한 후, 증가/감소를 수행한다.

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

7.1.3  문자열 연결 연산자

  • '+' 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다. 그 외의 경우는 산술 연산자로 동작한다.

  • '+', '-' 연산자를 이용하여 숫자 타입으로 변환하는 것을 암묵적 타입 변환(implicit coercion) 또는 타입 강제 변환(type corecion)이라고 한다.


7.2  할당 연산자

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

  • 할당 연산자 종류: '=', '+=', '-=', '*=', '/=', '%='

  • 할당문은 변수에 값을 할당하는 부수 효과만 있을 뿐 값으로 평가되지 않을 것처럼 보인다. 하지만 할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다.

var x;

// 할당문은 표현식인 문이다.
console.log(x=10); // 10
var a,b,c;

a = b = c = 0;  // 연쇄 할당

console.log(a, b, c); // 0, 0, 0

이러한 특징을 활용해 여러 변수에 동일한 값을 연쇄 할당할 수 있다.


7.3  비교 연산자

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

7.3.1  동등/일치 비교 연산자

  • 동등 비교(loose equality) 연산자일치 비교(strict equality) 연산자는 좌항과 우항의 피연산자가 같은 값으로 평가되는지 비교해 불리언 값을 반환한다. 하지만 비교하는 엄격성의 정도가 다르다.

  • 동등/일치 비교 연산자 종류: '==', '===', '!=', '!=='

  • 동등 비교(==) 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교한다.

// 동등 비교
5 == 5; // true

// 타입은 다르지만 암묵적 타입 변환을 통해 타입을 일치시키면 동등하다. 
5 == '5'; // true

동등 비교 연산자는 편리한 경우도 있지만 예측하기 어렵고 실수하기 쉽다. 따라서 동등 비교 연산자 보다는 일치 비교 연산자를 사용하는게 좋다.

  • 일치 비교(===) 연산자는 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 true를 반환한다.
// 일치 비교
5 === 5; // true

// 암묵적 타입 변환을 하지 않고 값을 비교한다.
// 즉, 값과 타입이 모두 같은 경우만 true를 반환한다. 
5 === '5'; // false
// NaN은 자신과 일치하지 않는 유일한 값이다.
NaN === NaN; // false

// isNaN 함수는 지정한 값이 NaN인지 확인하고 그 결과를 불리언 값으로 반환한다.
isNaN(NaN); // true
isNaN(10); // false
isNaN(1 + undefined); // true

NaN은 자신과 일치하지 않는 유일한 값이다. 따라서 숫자가 NaN인지 조사하려면 빌트인 함수 isNaN을 사용한다.

// 양의 0과 음의 0의 비교. 일치 비교/동등 비교 모두 결과는 true다.

0 === -0; // true
0 == -0;  // true

자바스크립트에는 양의 0과 음의 0이 있는데 이들을 비교하면 true를 반환한다.

  • ES6에서 도입된 Object.is 메서드는 다음과 같이 예측 가능한 정확한 비교 결과를 반환한다. 그 외에는 일치 비교 연산자(===)와 동일하게 동작한다.
-0 === +0;            // true
Object.is(-0, +0);    // false

NaN === NaN;          // false
Object.is(NaN, NaN);  // true
  • 부동등 비교 연산자(!=)와 불일치 비교 연산자(!==)는 각각 동등 비교(==) 연산자와 일치 비교(===) 연산자의 반대 개념이다.

7.3.2  대소 관계 비교 연산자

  • 대소 관계 비교 연산자는 피연산자의 크기를 비교하여 불리언 값을 반환한다.

  • 대소 관계 비교 연산자 종류: '>', '<', '>=', '<='


7.4  삼항 조건 연산자

  • 삼항 조건 연산자(ternary operator)는 조건식의 평가 결과에 따라 반환할 값을 결정한다. 자바스크립트의 유일한 삼항 연산자이다.

  • 삼항 조건 연산자: "조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값

  • 삼항 조건 연산자 표현식은 조건문이다. 따라서 if ... else문을 사용하여 표현할 수 있다.

  • 삼항 조건 연산자 표현식은 값처럼 사용할 수 있지만 if ... else 문은 값처럼 사용할 수 없다.

var x = 10;

// if ... else 문은 표현식이 아닌 문이다. 따라서 값처럼 사용할 수 없다. 
var result = if (x % 2) { result = '홀수'; } else { result = '짝수'; };
// SyntaxError: Unexpected token if    


//삼항 조건 연산자 표현식은 표현식인 문이다. 따라서 값처럼 사용할 수 있다. 
var result = x % 2 ? '홀수' : '짝수';
console.log(result); // 짝수

삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다.


새로운 용어 정리



참고 문헌


* 모던 자바스크립트 Deep Dive ( 자바스크립트의 기본 개념과 동작 원리 ) / 이웅모 지음

profile
developer junior

0개의 댓글