JavaScript 응용 프로그램 프로세스 중에 다양한 비교가 발생합니다. 오늘, 나는 당신을 위해 세 가지 상황을 편집하고 함께 배웁니다.
1. 두 객체의 비교
JavaScript 비교는 몇 가지 이상한 기능과 혼합되어 있습니다. 몇 가지 간단한 비교를 살펴 보겠습니다.
// 원시 값의 비교> var a = 12undefined> var b = 12undefined> a == btrue> a === btrue // 객체의 비교> var c = [] undefined> var d = [] undefined> c == dfalse> c === dfalse
위의 결과에서, 우리는 두 가지 원래 값을 비교하는 것이 객체 비교와 약간 다른 것으로 보입니다. 두 객체의 값을 비교하면 값이 동일하더라도 최종 결과는 다릅니다. 두 객체를 비교할 때는 두 객체의 참조를 비교해야합니다.
우리가 이것을한다면 :
> var m = {} undefined> n = m {}> n === mtrue그것은 두 변수 모두 동일한 객체를 가리므로 동일하다는 것을 의미합니다.
2. 다른 유형의 비교
다음과 같은 특별한 상황도 있습니다
> 12 == "12"true> null == undefinedtrue> undefined == falsefalse> null == falsefalse> null === undefinedFalse
정수가 끈과 동일 할 수있는 이유는 무엇입니까? == (동일하지 않고 동일)가 유형을 비교하지 않기 때문입니다. 비교하기 전에 비교해야 할 값을 입력합니다. 여기서 문자열은 숫자 유형으로 변환 된 다음 비교됩니다 . 왜 그렇게 확실합니까? 몇 가지 실험을합시다.
> 1 + 23> 1 + "2" '12'> 2 < "12"true> "2"< "12"false
위의 예에서 값 2가 실제로 문자열 12보다 작다는 것을 알 수 있습니다. 값이 문자열로 변환되기 전에 비교가 문자열로 변환되면 결과는 "2"> "12"여야합니다.
아직 믿지 않습니까? 또 다른 예를 드리겠습니다.
> "12d"> 12false> "12d"<12false> "12d"== 12false> "12"< "12d"true
이게 왜? 12를 문자열로 변환하면 12d는 12보다 클 예정입니까? 왜 그것을 거짓과 비교합니까? 나는 그것이 아래 특별한 사람 때문이라고 생각합니다.
> nan <1false> nan> 1false
NAN이 비교하더라도 False를 반환합니다. 그 자체를 포함하여. 따라서 변수가 NAN인지 확인하는 가장 좋은 방법은 x! = x를 반환 한 경우 x가 nan임을 의미합니다 . 그런 다음 12D가 특수 문자가 있고 마침내 NAN이되기 때문에 12D를 숫자 유형으로 변환 해야하는 경우입니다. 숫자 유형과 어떻게 비교하든 결과는 거짓입니다.
숫자 및 문자열 연산자의 경우 Plus Sign 연산자는 비교 연산자와 다르게 작동합니다. 플러스 연산자는 줄을 선호하며 피연산자 중 하나가 문자열 인 경우 문자열로 변환됩니다. 비교 연산자는 숫자를 선호하며 문자열 비교는 두 숫자가 문자열 일 때만 수행됩니다.
위의 널 및 정의되지 않은 경우. . . . . 나는 당분간 그들의 행동을 설명하는 방법을 모른다. 나는 지금 만 기억할 수 있습니다. 그들은 특별하기 때문에.
3. 원래 값과 객체 비교
비교해야 할 두 개의 객체가 JavaScript 객체와 골격이라면 어느 정도의 유형 변환이 수행됩니다. 객체의 값을 원래 값으로 변환하는 방법을 찾으십시오. 일반적으로, valueOf, toString 두 가지 방법이 있습니다. 다음은 빈 개체의 변환 과정입니다.
// 나는 직접 썼다> a = {} {} // 1. 변환 값> a.valueof () {} // 2. 위의 조작이 원시 값을 초래하면 tostring을 사용하여 변환합니다. (그리고 그 반대도 마찬가지)> a.toString () '[Object Object]'> a == '[Object Object]'true 위의 것은 실제로 내장 객체 변환 프로세스 및 JavaScript 메커니즘입니다. 먼저 전환을 위해 valueOf 부릅니다. 획득 된 값이 원시적 값이 아닌 경우 toString 호출하여 변환됩니다. 최종 값은 '[object Object]' 매우 이상한 값이지만 원래 값입니다. 변수 a 와이 값이 동일하다면 (합동이 아님), 실제 결과를 얻을 수 있습니다. (붕괴 되었습니까?)
그러나 권위있는 안내서는 다음과 같은 원칙을 제공합니다.
원시 값 JavaScript Core 내장 클래스를 먼저 ValueO F로 변환 한 다음 toString 사용하여 변환하십시오. 날짜 클래스를 제외하고는 변환에만 toString 만 사용합니다. JavaScript의 핵심에 있지 않은 개체는 해당 구현에서 정의되는 방식을 통해 원래 값으로 변환됩니다.
위의 설명에 따르면. a = {}를 원래 값과 비교하면 먼저 함수 valueOf 호출하며 결과는 {}가 분명히 원시적 값이 아닙니다. 그런 다음 toString 사용하여 변환이 수행됩니다. 마지막으로, 그 이상한 결과가 나왔습니다. 그러나이 이상한 결과 '[object Object]' 실제로 {}의 원래 값입니다. (문자열의 문자입니다).
위는 JavaScript의 비교 요약입니다. 이 기사의 설명이 JavaScript를 배울 때 모든 사람에게 도움이되기를 바랍니다.