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)로 취급되기 때문에 연산에 사용할 수 있다.
'Javascript' 카테고리의 다른 글
웹 페이지 편집하는 방법 디자인 모드(document.designMode) 활성화 (0) | 2022.10.10 |
---|---|
스와이퍼 swiper z index 이슈 (0) | 2022.08.03 |
자바스크립트 배열 메서드 시각화 (0) | 2022.03.05 |
video loadmetadata 이벤트가 일관되게 실행되지 않는 이유 (1) | 2022.02.08 |
자바스크립트 ??, !! 연산자 (0) | 2022.01.10 |
개의 댓글