다음 코드와 출력이 주어지고 JavaScript가 빈 문자열(" ")을 0 −
으로 변환하는 이유를 알아내야 한다고 가정해 보겠습니다.const digify = (str) => { const parsedStr = [...str].map(Number) return parsedStr; } console.log(digify("778 858 7577"))
출력
[ 7, 7, 8, 0, 8, 5, 8, 0, 7, 5, 7, 7 ]
이 동작은 특히 문자열에 0이 있는 경우 매우 혼란스러울 수 있습니다.
이는 Map() 함수 내부에서 Number를 사용하여 각 문자를 해당 숫자로 변환할 때 실제로 수행하는 작업은 Strict Equality Comparison(===) 대신 AbstractEquality Comparison(==)을 사용하기 때문에 발생합니다. ' ==0은 true를 생성하므로 각 공백은 0으로 변환됩니다.
이 불합리한 동작을 방지하기 위해 다음과 같이 map() 함수에서 약간의 조정을 할 수 있습니다 -
예시
const sin = (str) => { const parsedStr = [...str].map(i => parseInt(i, 10)) return parsedStr; } console.log(sin("778 858 7577"))
따라서 공백이 발생할 때마다 NaN으로 변환되며 이는 보다 논리적인 동작입니다.
출력
[ 7, 7, 8, NaN, 8, 5, 8, NaN, 7, 5, 7, 7 ]