문제

"==="비교 유형을 사용하여 다음 코드를 실행하면 숫자 유형을 문자열 유형과 비교하기 때문에 다음 코드가 "동일하지 않음"으로 표시됩니다.

var a = 20;
var b = "20";
    if (a === b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

그러나 "=="를 사용하여 값 만 비교하면 "동일한"메시지에서 어떻게 결과를 비교하는지 이해하지 못합니다.

var a = 20;
var b = "20";
    if (a == b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

값은 어떻게 같습니까? 문자열 "20"은 ASCII 문자 50 및 48 (이진에서 0110010 및 0110000)으로 저장되었으며 20은 실제 이진 번호 0010100으로 저장되지 않습니까?

편집 : 모두 감사합니다! 나는 모든 반응이 훌륭하다고 생각하고 이것을 훨씬 더 잘 이해하는 데 도움이되었습니다.

도움이 되었습니까?

해결책

그만큼 == 연산자는 변수의 값 만 비교합니다. 유형이 다르면 변환이 작동됩니다. 따라서 숫자 20은 문자열 "20"으로 변환되며 결과는 비교됩니다.

그만큼 === 연산자는 값뿐만 아니라 유형을 비교하므로 캐스트는 작동하지 않습니다. 이 경우 "20" !== 20

다른 팁

유형 변환이 필요한 경우 JavaScript는 다음과 같이 문자열, 숫자, 부울 또는 물체 피연산자를 변환합니다.

  • 숫자와 문자열을 비교할 때 문자열은 숫자 값으로 변환됩니다. JavaScript는 문자열 숫자 문자를 숫자 유형 값으로 변환하려고 시도합니다. 첫째, 수학적 값은 문자열 숫자 문자에서 파생됩니다. 다음 으로이 값은 가장 가까운 숫자 유형 값으로 반올림됩니다.
  • 피연산자 중 하나가 부울 인 경우 부울 피연산자는 true 인 경우 1로 변환되고 False 인 경우 +0입니다.
  • 객체를 숫자 또는 문자열과 비교하면 JavaScript는 객체의 기본값을 반환하려고 시도합니다. 연산자는 오브젝트의 값 및 토스트 링 방법을 사용하여 객체를 원시 값, 문자열 또는 숫자 값으로 변환하려고 시도합니다. 이 객체를 변환하려는 시도가 실패하면 런타임 오류가 발생합니다.

== 비교의 문제점은 JavaScript 버전 1.2가 유형 변환을 수행하지 않고 버전 1.1 및 1.3 이후에 수행한다는 것입니다.

=== 비교는 버전 1.3 이후에 사용할 수 있으며 두 변수 일치를 확인하는 가장 좋은 방법입니다.

JavaScript 코드의 버전 1.1, 1.2 및 1.3 버전과 호환 되려면 코드가 필요하다면 변수가 모든 일치가 마치 수행중인 === 비교처럼 일치하도록해야합니다.

JavaScript 엔진은 A를 숫자로보고 평가 전에 B를 숫자로 캐스팅합니다.

"=="의 정의의 일부는 값이 가능한 경우 비교 전에 동일한 유형으로 변환된다는 것입니다. 이것은 느슨하게 입력 된 많은 언어에 해당됩니다.

JavaScript는 숫자가 포함 된 문자열이 해당 숫자와 "동일"으로 간주되도록 설계되었습니다. 그 이유는 사용자가 입력 필드에 숫자를 입력하는 경우 사용의 단순성이므로 사이트는 JS로 확인합니다. 비교하기 전에 입력 된 문자열을 숫자로 캐스팅 할 필요가 없습니다.

공통 사용 사례를 단순화하고 === 운영자를 사용하면 여전히 고려 된 유형과 비교할 수 있습니다.

내가 아는 한 JavaScript는 즉시 자동 데이터 유형 변환을 수행하므로 변수가 자동으로 동등한 유형으로 캐스팅 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top