サーチ…
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つはちょっと難しいです: Array
がNaN
かどうかを調べる。これを行うために、 Number()
コンストラクタは最初に配列を文字列に変換してからNumber()
変換します。これが理由でもあるisNaN([])
とisNaN([34])
の両方で返すfalse
、しかしisNaN([1, 2])
とisNaN([true])
の両方を返すtrue
:彼らは変換を受けるために""
"34"
、 "1,2"
、 "true"
ある。一般に、 文字列表現が有効な数値に変換できる要素が1 isNaN()
保持されていない場合、配列はisNaN()
によってNaN
とみなされisNaN()
。
Number.isNaN()
ECMAScript 6では、 Number.isNaN()
関数は、主にパラメータを数値に強制的に変換するwindow.isNaN()
問題を回避するために実装されています。 Number.isNaN()
、実際にはテスト前に値を数値に変換しようとしません 。これは、型番号の値、つまりNaN
もtrue
返すことを意味しtrue
(基本的にNumber.isNaN(NaN)
のみを意味しtrue
)。
1つの引数
number
でNumber.isNaN
が呼び出されると、次の手順が実行されます。
- Type(number)がNumberでない場合は
false
返しfalse
。- numberが
NaN
場合はtrue
返しtrue
。- それ以外の場合は
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
一見すると、 null
とundefined
が基本的に同じであるように見えるかもしれ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
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_INTEGER
、 Number.MAX_SAFE_INTEGER
)の範囲外の値で中断します。
Number.EPSILON
は、1と1より大きい最小のNumber
との間の相違を表し、したがって2つの異なるNumber
値間の可能な最小の差を表すことに注意してください。これを使用する理由の1つは、JavaScriptによって数値がどのように格納されるかという性質に起因します。