サーチ…


NaNを返す操作

数値以外の数学演算はNaNを返します。

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

例外:単一数値配列。

[2] * [3]  // Returns 6

また、 +演算子は文字列を連結することに注意してください。

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

ゼロを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

この最後の1つはちょっと難しいです: ArrayNaNかどうかを調べる。これを行うために、 Number()コンストラクタは最初に配列を文字列に変換してからNumber()変換します。これが理由でもあるisNaN([])isNaN([34])の両方で返すfalse 、しかしisNaN([1, 2])isNaN([true])の両方を返すtrue :彼らは変換を受けるために"" "34""1,2""true"ある。一般に、 文字列表現が有効な数値に変換できる要素が1 isNaN()保持されていない場合、配列はisNaN()によってNaNとみなされisNaN()

6

Number.isNaN()

ECMAScript 6では、 Number.isNaN()関数は、主にパラメータを数値に強制的に変換するwindow.isNaN()問題を回避するために実装されています。 Number.isNaN() 、実際にテスト前に値を数値に変換しようとしません 。これは、型番号の値、つまりNaNtrue返すことを意味しtrue (基本的にNumber.isNaN(NaN)のみを意味しtrue )。

ECMA-262より20.1.2.4

1つの引数numberNumber.isNaNが呼び出されると、次の手順が実行されます。

  1. Type(number)がNumberでない場合はfalse返しfalse
  2. numberがNaN場合はtrue返しtrue
  3. それ以外の場合はfalse返し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かどうかを正しく調べるには、 厳密な等価演算子と比較しnull

var a = null;

a === null; // true

未定義およびnull

一見すると、 nullundefinedが基本的に同じであるように見えるかもしれundefinedんが、微妙ですが重要な違いがあります。

undefinedされていない変数の場合のように、値がどこになければならないので、コンパイラには値が存在しないため、値が存在しないため、 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への参照Number.POSITIVE_INFINITY

それは他のどの値よりも大きく、0で割るか、オーバーフローするほど大きい数値の式を評価することで得ることができます。これは実際には、JavaScriptに0のエラーによる除算がないことを意味します。Infinityがあります。

そこにもある-Infinity数学的な負の無限大であり、それは他のどの値より低いです。

-Infinityを取得するには、 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返します。

これはグローバルオブジェクトのプロパティであり、 Number.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_INTEGERNumber.MAX_SAFE_INTEGER )の範囲外の値で中断します。

Number.EPSILONは、1と1より大きい最小のNumberとの間の相違を表し、したがって2つの異なるNumber値間の可能な最小の差を表すことに注意してください。これを使用する理由の1つは、JavaScriptによって数値がどのように格納されるかという性質に起因します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow