>  기사  >  웹 프론트엔드  >  JavaScript의 더 엄격한 동등성 [번역]_javascript 팁

JavaScript의 더 엄격한 동등성 [번역]_javascript 팁

WBOY
WBOY원래의
2016-05-16 17:49:51930검색
1. NaN 감지
수학적으로 모든 값 x는 항상 그 자체와 같습니다.

x = x

그러나 이 규칙은 == 및 NaN:
코드 복사 코드는 다음과 같습니다.

>
false

결과적으로 indexOf 메서드를 사용하여 NaN을 포함하는 배열에서 NaN을 찾을 수 없습니다. 왜냐하면 이 메서드는 요소가 다음과 같은지 여부를 확인하기 위해 내부적으로 ===를 사용하기 때문입니다. 매개변수에 지정된 값:
코드 복사 코드는 다음과 같습니다.

> ; [ NaN ].indexOf(NaN)
-1

번역자 주: switch 문에도 동일하게 적용됩니다
코드 복사 코드는 다음과 같습니다.

switch(NaN) {
case NaN:alert(NaN)
}

===를 사용하여 NaN을 감지할 수 없는 경우 무엇을 사용해야 합니까? 전역 함수 isNaN()이 있지만 이 함수에는 문제가 있습니다. 즉, 항상 매개 변수의 값을 암시적으로 변환합니다. 따라서 NaN이 아닌 많은 값을 판단할 때도 true를 반환합니다.
코드 복사 코드는 다음과 같습니다:

> isNaN("foo")
true

설명: "foo"는 숫자 NaN으로 변환됩니다.
코드 복사 코드는 다음과 같습니다.
> Number("foo")
NaN

NaN을 감지하는 또 다른 방법 이 방법은 NaN을 자신과 완전히 다른 유일한 값으로 사용하는 것입니다.

코드 복사 코드는 다음과 같습니다.
function myIsNaN(value) {
return value !== value;


또 다른 이해하기 쉬운 방법은 isNaN()을 사용하기 전에 값이 숫자 유형인지 확인하는 것입니다. 이렇게 하면 암시적 변환 문제를 피할 수 있습니다.


function myIsNaN2(value) {
return typeof value === 'number' && isNaN(value)
}


ECMAScript.next Number.isNaN() 메소드에 isNaN() 함수의 수정 버전이 새로 추가됩니다.


2. -0과 0 사이
이러한 요구 사항은 드물지만 때로는 0(양수 0)과 -0(음수 0)을 구분해야 할 때도 있습니다. JavaScript에서는 이 두 값이 서로 다릅니다. 하지만 === 알 수 없음:


> -0 === 0
true


그럼 어떻게 구별할까요? JavaScript에서는 양수를 -0으로 나누면 결과가 -Infinity가 됩니다. 결과는 무한대입니다.


> 1 / -0
- 무한

> 1 / 0
무한

>
false


번역자 주: 함수로 작성


함수 isPositiveZero(zero){
return 1/ zero === Infinity

}
function isNegativeZero(zero){
return 1/ 0 === -무한대
}



3. ECMAScript.next의 더 엄격한 동일성: "is" 연산자

ECMAScript.next에는 "is" 연산자가 있습니다. 의 기능은 "보다 엄격한 평등"입니다. NaN을 자신과 동일하게 간주할 수 있으며 -0과 0을 구별할 수도 있습니다. "isnt"라는 반대 연산자도 있습니다. 예:
코드 복사 코드는 다음과 같습니다.

> NaN은


> -0은 0이 아닙니다



현재 이 연산자는

Object.is() 메소드로 보완할 수 있습니다. 이 메소드는 다음과 같이 구현할 수 있습니다:

코드 복사 코드는 다음과 같습니다.
Object.is = function(x, y) {
if (x === y ) {
// x === 0 => 0과 -0을 비교
return x !== 0 || (1/x === 1/y)

// x !== y => x와 y가 모두 NaN인 경우에만 true를 반환합니다.
return x !== x && y !== y



3.1 Object.is() 사용해 보기



Object.is()
를 사용하고 싶다면

es6-shim을 사용할 수 있습니다. 이는 ECMAScript.next(ECMAScript 6)의 일부 기능을 ECMAScript 5로 포팅할 수 있습니다. . 번역자 주: ES3 환경에서 사용하려면 es5-shim

을 사용해야 합니다. 4.

JavaScript의 동등성: === 대 ==
  1. ECMAScript.next: Eich의 “TXJS” 업데이트
  2. JavaScript의 NaN과 Infinity
  3. es6-shim – ECMAScript 5의 ECMAScript 6 기능
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.