JavaScript

[JavaScript] "3" - "1"은 어떻게 2가 되는가?

lado 2021. 8. 4. 02:13

❓ 문제의 발단

const stringNumber = "12345";
let sum = 0;
for (let i = 0; i < stringNumber.length; i += 1) {
    sum += stringNumber[i] - "0";
}
// sum === 15

위 코드에서 stringNumber[i] - "0"의 의미가 이해가 안됐다. 로그를 찍어보니 string 타입인 숫자를 number 타입으로 변경해주기 위한 코드였다. 근데 "5" - "0" = 5 이거 너무 이상하지 않은가?


❗ 문자 간 연산할 때는 ASCII 코드로 연산

결론만 말하면 문자끼리 연산할 때는 자동으로 문자의 ASCII 코드를 연산한 결과를 반환한다. 문자 "5"의 ASCII 코드는 53, 문자 "0"의 ASCII 코드는 48, 53 - 48은 5이므로 숫자 5가 반환된다. "3" - "1"도 같은 원리로 숫자 2가 반환된다.


❓❗ 그렇다면 더할 때는?

JavaScript에서 "3" + "1"는 4가 아니라 "31"이 된다. 더하기는 왜 ASCII 코드로 연산하지 않을까? +는 더하기 연산자인 동시에 문자열을 연결하는 연결 연산자이기도 하다. 그렇기 때문에 문자열 사이에 +가 있으면 먼저 문자열을 연결하는 기능을 수행하는 것이다. +를 제외한 연산자들은 해당 문자의 ASCII 코드를 연산한 값을 반환한다.

 

 

참고자료