Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

Array.map(Number)이 빈 공간을 0으로 변환하는 이유는 무엇입니까? 자바스크립트

<시간/>

다음 코드와 출력이 주어지고 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
]