수색…


NaN을 반환하는 연산

숫자가 아닌 값에 대한 수학 연산은 NaN을 반환합니다.

"a" + 1
"b" * 3
"cde" - "e"
[1, 2, 3] * 2

예외 : 단일 숫자 배열.

[2] * [3]  // Returns 6

또한 + 연산자는 문자열을 연결합니다.

"a" + "b"  // Returns "ab"

0을 0으로 나누면 NaN 됩니다.

0 / 0         // NaN

참고 : 일반적으로 (JavaScript 프로그래밍과 달리) 수학에서는 0으로 나눌 수 없습니다.

NaN을 반환하는 수학 라이브러리 함수

일반적으로 숫자가 아닌 인수가 지정된 Math 함수는 NaN을 반환합니다.

Math.floor("a")

Math.sqrt허수 또는 복소수를 지원하지 않기 때문에 음수의 제곱근은 NaN을 반환합니다.

Math.sqrt(-1)

isNaN ()을 사용하여 NaN 테스트

window.isNaN()

전역 함수 isNaN() 은 특정 값이나 표현식이 NaN 평가되는지 확인하는 데 사용할 수 있습니다. 이 함수는 간단히 값이 숫자인지 아닌지 (*) 변환하려고 시도한 다음 결과 값이 NaN 인지 검사합니다. 이러한 이유로이 테스트 방법은 혼동을 일으킬 수 있습니다 .

(*) "변환"방법은 간단하지 않습니다. 알고리즘에 대한 자세한 설명은 ECMA-262 18.2.3 을 참조하십시오.

이 예제는 isNaN() 비헤비어를 더 잘 이해하는 데 도움이됩니다.

isNaN(NaN);          // true
isNaN(1);            // false: 1 is a number
isNaN(-2e-4);        // false: -2e-4 is a number (-0.0002) in scientific notation
isNaN(Infinity);     // false: Infinity is a number
isNaN(true);         // false: converted to 1, which is a number
isNaN(false);        // false: converted to 0, which is a number
isNaN(null);         // false: converted to 0, which is a number
isNaN("");           // false: converted to 0, which is a number
isNaN(" ");          // false: converted to 0, which is a number
isNaN("45.3");       // false: string representing a number, converted to 45.3
isNaN("1.2e3");      // false: string representing a number, converted to 1.2e3
isNaN("Infinity");   // false: string representing a number, converted to Infinity
isNaN(new Date);     // false: Date object, converted to milliseconds since epoch
isNaN("10$");        // true : conversion fails, the dollar sign is not a digit
isNaN("hello");      // true : conversion fails, no digits at all
isNaN(undefined);    // true : converted to NaN
isNaN();             // true : converted to NaN (implicitly undefined)
isNaN(function(){}); // true : conversion fails
isNaN({});           // true : conversion fails
isNaN([1, 2]);       // true : converted to "1, 2", which can't be converted to a number

마지막 하나는 약간 까다 롭습니다 : ArrayNaN 인지 확인. 이를 위해 Number() 생성자는 먼저 배열을 문자열로 변환 한 다음 숫자로 변환합니다. 이 이유입니다 isNaN([])isNaN([34]) 을 모두 반환 false ,하지만 isNaN([1, 2])isNaN([true]) 을 모두 반환 true : 그들은 변환됩니다 때문에 "" , "34" , "1,2""true" 됩니다. 일반적으로 문자열 표현이 유효한 숫자로 변환 될 수있는 요소가 하나만있는 경우가 아니라면 배열은 isNaN() 의해 NaN 으로 간주됩니다 .

6

Number.isNaN()

ECMAScript 6에서 Number.isNaN() 함수는 주로 매개 변수를 숫자로 변환하는 window.isNaN() 문제를 피하기 위해 구현되었습니다. Number.isNaN() 은 실제로 테스트하기 전에 값을 숫자 로 변환하려고 시도하지 않습니다 . 이것은 또한 형식 번호의 값, 즉 NaNtrue 반환 한다는 것을 의미 true (기본적으로 Number.isNaN(NaN) 만 의미 함).

ECMA-262에서 20.1.2.4 :

하나의 인수 number Number.isNaN 이 호출되면 다음 단계가 수행됩니다.

  1. Type (number)이 Number가 아니면 false 반환합니다.
  2. number가 NaN 경우는 true 돌려줍니다.
  3. 그렇지 않은 경우는 false 리턴합니다.

몇 가지 예 :

// The one and only 
Number.isNaN(NaN);          // true

// Numbers
Number.isNaN(1);            // false
Number.isNaN(-2e-4);        // false
Number.isNaN(Infinity);     // false

// Values not of type number
Number.isNaN(true);         // false
Number.isNaN(false);        // false
Number.isNaN(null);         // false
Number.isNaN("");           // false
Number.isNaN(" ");          // false
Number.isNaN("45.3");       // false
Number.isNaN("1.2e3");      // false
Number.isNaN("Infinity");   // false
Number.isNaN(new Date);     // false
Number.isNaN("10$");        // false
Number.isNaN("hello");      // false
Number.isNaN(undefined);    // false
Number.isNaN();             // false
Number.isNaN(function(){}); // false
Number.isNaN({});           // false
Number.isNaN([]);           // false
Number.isNaN([1]);          // false
Number.isNaN([1, 2]);       // false
Number.isNaN([true]);       // false

없는

null 는 객체 값의 의도적 인 부재를 나타내는 데 사용되며 기본 값입니다. undefined 와 달리 전역 객체의 속성은 아닙니다.

그것은 undefined 않았지만 동일하지는 않습니다.

null == undefined; // true
null === undefined; // false

주의 : typeof null'object' 입니다.

typeof null; // 'object';

값이 null 인지 제대로 확인하려면 엄격한 항등 연산자 와 비교하십시오.

var a = null;

a === null; // true

정의되지 않았고 null

언뜻 보면 nullundefined 가 기본적으로 동일하지만, 미묘하지만 중요한 차이점이있을 수 있습니다.

undefined 는 컴파일러에 값이 없기 때문에 할당되지 않은 변수의 경우처럼 값이 있어야하는 곳이 없으므로 컴파일러에 값이 없기 때문입니다.

  • undefined 는 할당 된 값이 없음을 나타내는 전역 값입니다.
    • typeof undefined === 'undefined'
  • null 은 변수가 명시 적으로 "값 없음"으로 할당되었음을 나타내는 객체입니다.
    • typeof null === 'object'

변수를 undefined 설정하면 변수가 효과적으로 존재하지 않습니다. JSON 직렬화와 같은 일부 프로세스는 undefined 속성을 객체에서 제거 할 수 있습니다. 대조적으로, null 특성 표시는 보존되어 "비어있는"특성의 개념을 명시 적으로 전달할 수 있습니다.

다음은 undefined 평가됩니다.

  • 변수가 선언되었지만 값이 지정되지 않은 경우 (즉, 정의 된 경우)
    • let foo;
      console.log('is undefined?', foo === undefined);
      // is undefined? true
      
  • 존재하지 않는 속성의 값에 액세스하기
    • let foo = { a: 'a' };
      console.log('is undefined?', foo.b === undefined);
      // is undefined? true
      
  • 값을 반환하지 않는 함수의 반환 값
    • function foo() { return; }
      console.log('is undefined?', foo() === undefined);
      // is undefined? true
      
  • 선언되었지만 함수 호출에서 생략 된 함수 인수의 값
    • function foo(param) { 
        console.log('is undefined?', param === undefined);
      }
      foo('a');
      foo();
      // is undefined? false
      // is undefined? true
      

undefined 는 전역 window 객체의 속성이기도합니다.

// Only in browsers
console.log(window.undefined); // undefined
window.hasOwnProperty('undefined'); // true    
5

ECMAScript 5 이전에 window.undefined 속성의 값을 잠재적으로 다른 모든 값으로 변경할 수있었습니다.

무한과 - 무한

1 / 0; // Infinity
// Wait! WHAAAT?

Infinity 는 수학적 무한대를 나타내는 전역 객체 (따라서 전역 변수)의 속성입니다. Number.POSITIVE_INFINITY 대한 참조입니다.

그것은 다른 어떤 값보다도 크며, 0으로 나눔으로써 또는 오버 플로우되는 너무 큰 숫자의 표현을 평가함으로써 얻을 수 있습니다. 이것은 실제로 자바 스크립트에서 0 에러에 의한 나눗셈이 없다는 것을 의미합니다. 무한대가 있습니다!

이 또한 -Infinity 수학 부의 무한대이며, 다른 값보다 낮은입니다.

-Infinity 를 얻으려면 Infinity 를 무효화하거나 Number.NEGATIVE_INFINITY 에서 해당 Number.NEGATIVE_INFINITY 참조 Number.NEGATIVE_INFINITY .

- (Infinity); // -Infinity

이제 예제를 재미있게 보자.

Infinity > 123192310293; // true
-Infinity < -123192310293; // true
1 / 0; // Infinity
Math.pow(123123123, 9123192391023); // Infinity
Number.MAX_VALUE * 2; // Infinity
23 / Infinity; // 0
-Infinity; // -Infinity
-Infinity === Number.NEGATIVE_INFINITY; // true
-0; // -0 , yes there is a negative 0 in the language
0 === -0; // true
1 / -0; // -Infinity
1 / 0 === 1 / -0; // false
Infinity + Infinity; // Infinity

var a = 0, b = -0;

a === b; // true
1 / a === 1 / b; // false

// Try your own!

NaN

NaN 은 "Not a Number"의 약자입니다. JavaScript의 수학적 함수 나 연산이 특정 숫자를 반환 할 수 없으면 대신 NaN 값을 NaN 합니다.

전역 객체의 속성이며 Number.NaN 대한 참조입니다.

window.hasOwnProperty('NaN'); // true
NaN; // NaN

아마도 혼란스럽게도 NaN 은 여전히 ​​숫자로 간주됩니다.

typeof NaN; // 'number'

항등 연산자를 사용하여 NaN 을 확인하지 마십시오. 대신 isNaN 을 참조하십시오.

NaN == NaN  // false
NaN === NaN // false

수 상수

Number 생성자에는 유용 ​​할 수있는 내장 된 상수가 있습니다.

Number.MAX_VALUE;          // 1.7976931348623157e+308
Number.MAX_SAFE_INTEGER;   // 9007199254740991

Number.MIN_VALUE;          // 5e-324
Number.MIN_SAFE_INTEGER;   // -9007199254740991

Number.EPSILON;            // 0.0000000000000002220446049250313

Number.POSITIVE_INFINITY;  // Infinity
Number.NEGATIVE_INFINITY;  // -Infinity

Number.NaN;                // NaN

대부분의 경우 Javascript의 여러 연산자는 ( Number.MIN_SAFE_INTEGER , Number.MAX_SAFE_INTEGER ) 범위를 벗어나는 값으로 중단됩니다.

Number.EPSILON 은 하나와 가장 작은 Number 가 1보다 크고 다른 두 Number 값 사이에 가능한 가장 작은 차이를 나타내는 점에 유의하십시오. 이것을 사용하는 한가지 이유는 JavaScript가 숫자를 저장하는 방식의 성격 때문 입니다. 두 숫자의 동일성 확인



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow