Daehyunii's Dev-blog

단항 산술 연산자 관련 원리가 궁금하다 본문

❔ Question/JavaScript

단항 산술 연산자 관련 원리가 궁금하다

Daehyunii 2022. 6. 28. 14:07

-단항 산술 연산자

단항 산술 연산자 +,-는 숫자 값으로 평가되지 않는 표현식에 붙이면 숫자 값으로 암묵적 타입 변환이 일어난다.

console.log(+'1') // 숫자 값 1
console.lop(+true) // 숫자 값 1
console.lop(+false) // 숫자 값 0
console.lop(+undefined) // 숫자 값 NaN

그런데 이항 산술 연산자로 동작하는 숫자 값으로 평가되지 않는 표현식은 숫자 값으로 암묵적 타입 변환이 일어나는데, 그 로직이 궁금하다.

(문자열이 1개 이상이면 문자열 연결 연산자로 동작하기 때문에 문자열 연결 연산자를 제외한 ex) true, false, null)

console.log(1+true) // 숫자 값 2

위 코드 처럼 true는 숫자 값 1로 암묵적 타입 변환 되는데, 이때 true 앞의 +가 먼저 단항 산술 연산자로의 역할을 하여 true를 숫자 값 1로 변환시킨 후, 1+1 이항 산술 연산이 일어나게 되는것인지, 아니면 바로 +가 이항 산술 연산자로 역할하고, true가 숫자 값 1로 암묵적 타입 변환이 되는 것인지 궁금하다.

 

-답 : 코드는 일반적으로 위에서 아래로, 좌측에서부터 우측으로 읽어 나간다. 이항 산술 연산자는 숫자 값을 만들어 내는 연산자이다. 그러므로 숫자 값을 만들어 내기 위해 자바스크립트 엔진은 숫자 값이 아닌 피연산자를 암묵적 타입 변환을 하여 숫자값으로 만들고 평가하여 숫자 값을 만들어 내는 것이다. 단항 산술 연산자도 마찬가지로 숫자 값을 만들어 내기 위해 숫자 값이 아닌 값인 피연산자를 암묵적 타입 변환하여 숫자 값을 만들어 내는 것이다. 다시 말해, '1+true'에서 '+true'가 먼저 단항 산술 연산자로서 true를 숫자 값 1로 암묵적 타입 변환하는 것이 아니라, 이항 산술 연산자로서의 역할에 맞게 바로 암묵적 타입 변환이 이뤄지는 것이다. (단항 산술 연산자도 마찬가지다.)

 

<참조 : 모던 자바스크립트 Deep dive>