본문 바로가기
Javascript

단항 연산자 (Unary operator)인 +

by @hohoya33 2023년 02월 22일

Unary (+) Operator | 단항 연산자 (+)로 문자열을 숫자로 변환하는 법, 활용예시

 

단항 연산자(+)의 역할

단항 연산자(+)는 한 개의 피연산자, 즉 한 개의 인수와 짝을 이루어 역할을 합니다. 더하기를 의미하는 기존의 (+) 기호와는 달리, 숫자로 변환해주는 역할을 담당하는 단항 연산자 (+)는 인수의 바로 앞에 붙습니다. ECMA 공식 문서에 따르면 단항 연산자 (+)는 문자열인 인수를 숫자 형태로 빠르고 간단하게 바꾸어주는 문법입니다.

 

단항 연산자(+)가 적용될 수 있는 경우

문자열 앞에 단항 연산자 (+))를 붙여주면, 문자열을 숫자 타입으로 변환하여 리턴합니다. 문자열 뿐만 아니라 true, false, null값 또한 숫자 타입으로 변환합니다. 또 이진법과 16진법 수도 변환해줍니다. 

console.log(+"10");  // 10
console.log(+"10.1");// 10.1
console.log(+"-10"); // -10

console.log(+true);  // 1
console.log(+false); // 0
console.log(+0xBABE) // 47806 (Hexadecimal)
console.log(+null)   // 0

원래 숫자일 경우에는 +를 붙여도 아무 변화가 없습니다. +를 붙인다는 것의 의미가 양수로 만들어준다는 뜻은 아닙니다.

const a = -10
console.log(+a); // -10

문자열의 내용에 해당하는 숫자를 합치려면, 예를 들어 "10"과 "25"를 합해서 "35"의 결과가 나오도록 하려면 각각 숫자로 변환한 후 더해야 합니다. 문자열 상태에서 더한다면 문자가 나열된 상태로 리턴되기 때문입니다.

let bread = "2500"
let cake = "30000"

console.log(+(bread+cake)) 		// 250030000
console.log(+bread + +cake)		//32500

단항 연산자(+)가 적용될 수 없는 경우

문자열을 숫자로 변경할 수 없다면 NaN (Not a Number)를 리턴합니다. 대표적으로 문자열, 또는 빈 문자열이나 함수, 빈 객체는 숫자로 변환할 수 없기 때문에 NaN으로 리턴합니다.

console.log(+"abc"); // NaN
console.log(+function(val) {return val}) // NaN
console.log(+'')     // NaN
console.log(+'123a') // NaN
console.log(+{})     // NaN

 

 

 

 

 

The left-hand side of an arithmetic operation must be of type ‘any’ ‘number’ or an enum type (TS2363)

 

 

이 오류는 주로 new Date()를 연산하는 과정에서 발생하게 된다. js 코드에서는 문제가 없었지만 Typescript에서 사용할 경우는 오류로 처리된다.TS2363 오류 예시

_options.expires = new Date(new Date() * 1 + _options.expires * 864e+5)

위의 코드는 new Date() * 1 처리에서 오류로 발생된다. 이유는 Date() 로 생성한 값을 연산에 사용하기 때문이다. 물론 연산이 불가능한 것은 아니지만 Typescript에서는 이를 명시적으로 연산이 가능한 숫자와 같이 처리를 해 줘야 한다.

이를 해결하는 방법은 단항 연산자 (Unary operator)인 + 를 지정하면 된다.

TS2363 오류 해결 예시

_options.expires = new Date(+new Date() * 1 + _options.expires * 864e+5)

위와 같이 지정하면 new Date()의 결과를 숫자(number)로 취급되기 때문에 연산에 사용할 수 있다.

개의 댓글