여기에 놀라운 결과를 생성하는 코드 스니펫이 있다고 가정해 보겠습니다. 첫째, 모듈로 연산자가 문자열에서도 잘 작동한다는 것을 알 수 있습니다(놀랍게도). 둘째, 두 문자열을 연결하면 어색한 결과가 나옵니다.
JavaScript가 왜 그렇게 하는지 설명해야 합니까?
다음은 문제 코드입니다 -
예시
const numStr = '127'; const result = numStr % 5; const firstName = 'Armaan'; const lastName = 'Malik'; const fullName = firstName + + lastName; console.log('modulo result: ', result); console.log('full name: ', fullName);
출력
modulo result: 2 full name: ArmaanNaN
코드를 시작하기 전에 가장 기본적인 JavaScript → Type Coercion에 대해 먼저 알아보겠습니다.
유형 강제
기본적으로 유형 강제 변환은 JavaScript 컴파일러에서 한 데이터 유형을 다른 데이터 유형으로 변경하는 데 사용하는 방법입니다. 유효한 유형 강제 변환의 예는 문자열을 부울로, 숫자를 문자열로 변경하는 등입니다.
형식 강제 변환은 매우 방대한 주제이며 이 솔루션의 길이를 제한하기 위해 이 코드 조각에서 사용된 항목만 탐색합니다. 두 가지 유형 강제 변환 중 컴파일러에서 자동으로 수행되는 유형을 암시적 유형 강제 변환이라고 합니다.
그것은 다음과 같습니다 -
모든 데이터 유형(기본 또는 비기본)은 묵시적으로 -
로 강제 변환됩니다.-
문자열(이진 + 연산자와 함께 사용되는 경우).
-
숫자(+, -, /, *, %와 같은 산술 연산자 및 단항 +트리거만 사용하는 경우
이진법 +가 아닌 숫자 강제 변환, 비교 연산자, 비트 연산자 또는 느슨한 평등 연산자와 함께 사용할 때[==])
-
부울(논리 연산자 &| !와 함께 사용되는 경우)
***또 하나 주의할 점은 단항(+) 연산자의 우선 순위가 이진(+) 연산자보다 높다는 것입니다.
코드 설명
따라서 이러한 사항을 명확히 하고 코드로 이동하여 한 줄씩 살펴보겠습니다. −
Line 2 → result = '127' % 5;
암시적 강제 변환은 % 연산자를 사용하여 확인하므로 문자열 '127'을 숫자 127로 변환하고 2가 result −
에 저장됩니다.Line 5 → fullName = firstName + + lastName;
fullName = firstName + (+lastName);
정상적인 과정이라면 계산은 왼쪽에서 오른쪽으로 이루어지겠지만 단항연산자의 우선순위 때문에 먼저 숫자로 계산되고 연산은 다음과 같이 된다 -
fullName = firstName + NaN;
그리고
fullName = ArmaanNaN