모던 자바스크립트 Deep Dive -2

JA_X·2023년 3월 13일
0

Deep Dive 개인 공부

목록 보기
2/43

07장 연산자

7.1 산술연산자

7.1.2 단항 산술 연산자

숫자 타입이 아닌 피연산자에 + 단한 연산자를 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다. 이때 피연산자를 변경하는 것을 아니고 숫자 타입으로 변환한 값을 생성하여 반환한다. 따라서 부수효과는 없다.

var x = '1';

console.log(+x); // 1
console.log(x); // "1"

x = true;
console.log(+x); // 1
console.log(x); // ture

x = false;
console.log(+x); // 0
console.log(x); // false

// 문자열을 숫자로 타입 변환할 수 없으므로 NaN을 반환한다
x = 'Hello';
console.log(+x); // NaN 
console.log(x); // "Hello"

7.1.3 문자열 연결 연산자

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

// 문자열 연결 연산자
'1' + 2; // '12'
1 + '2'; // '12'

// 산술 연산
1 + 2; // 3

// true는 1로 타입 변환
1 + true; // 2

// false는 0으로 타입 변환
1 + false; // 1

// null은 0으로 타입 변환

1 + null; // 1

// undefined는 숫자로 타입 변환되지 않음
+undefined; // NaN
1 + undefined; // NaN

위 예제에서 주목할 점은 개발자의 의도와는 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 반환되기도 한다는 것이다. 이를 암묵적 타입변환(implicit coercion) 또는 타입 강제 변환(type coercion)이라고 한다.

7.4 삼항 조건 연산자

삼항 조건 연산자(ternary operator)는 조건식의 평가 결과에 따라 반환할 값을 결정한다.
삼항 조건 연산자는 첫 번째 피연산자가 true로 평가되면 두 번째 피연산자를 반환하고, 첫 번째 피연산자가 false로 평가되면 세 번째 피연산자를 반환한다.

(1. 조건식) ? (2. 조건식이 true일 때 반환할 값) : (3. 조건식이 false일 때 반환할 값)

물음표(?) 앞의 첫 번째 피연산자는 조건식, 즉 불리언 타입의 값으로 평가될 표현식이다. 만약 조건식의 평가 결과가 불리언 값이 아니라면 암묵적 타입으로 변환된다. 이때 조건식이 참이면 콜론(:) 앞의 두 번째 피연산자가 평가되어 반환되고, 거짓이면 콜론(:)뒤의 세 번째 피연산자가 평가되어 반환된다.

var x = 2;
// 2 % 2는 0이고 0은 false로 암묵적 타입 변환
var result = x % 2 ? '홀수' : '짝수';

console.log(result); // 짝수

조건에 따라 어떤 값을 결정해야 한다면 if...else 문보다 삼항 조건 연산자 표현식을 사용하는 편이 유리하다. 하지만 조건에 따라 수행해야 할 문이 하나가 아니라 여러 개라면 if...else 문의 가독성이 더 좋다.

7.9 지수연산자

ES7에서 도입된 지수 연산자는 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자를 반환한다.

2 ** 2; // 4
2 ** 2.5; // 5.65685424...
2 ** 0; // 1
2 ** -2; // 0.25
// 음수를 거듭제곱의 밑으로 사용해 계산하려면 괄호로 묶어야 한다
(-2) ** 2; // 4
// 지수 연산자는 이항 연산자 중에서 우선순위가 가장 높다
2 * 5 ** 2; // 50

지수 연산자가 도입되기 전에는 Math.pow 메서드를 사용했다.

Math.pow(2, 2); // 4
Math.pow(2, 2.5); // 5.65685424...
Math.pow(2, 0); // 1
Math.pow(2, -2); // 0.25

지수 연산자는 다음과 같은 경우 Math.pow 메서드보다 가독성이 좋다.

//지수 연산자의 결합 순서는 우항에서 좌항이다. 즉, 우결합성을 갖는다
2 ** (3 ** 2); // 512
Math.pow(2, Math.pow(3, 2)); // 512

0개의 댓글