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

JavaScript:% 연산자가 문자열에서 작동하는 이유는 무엇입니까? - (유형 강제)

<시간/>

여기에 놀라운 결과를 생성하는 코드 스니펫이 있다고 가정해 보겠습니다. 첫째, 모듈로 연산자가 문자열에서도 잘 작동한다는 것을 알 수 있습니다(놀랍게도). 둘째, 두 문자열을 연결하면 어색한 결과가 나옵니다.

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