106

ユーザーの選択に応じて(IEでのみ)Infinityを表示する一連のJavascript計算があります。

Infinityたとえば、単語の表示を停止して、0.0代わりに表示するにはどうすればよいですか?

4

8 に答える 8

196
if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY)
{
    // ...
}

isFinite処理方法によっては、代わりに関数を使用することもできますNaN。番号が、、またはの場合に戻りisFiniteます。falsePOSITIVE_INFINITYNEGATIVE_INFINITYNaN

if (isFinite(result))
{
    // ...
}
于 2011-01-18T13:27:30.683 に答える
14

ES6Number.isFinite()メソッドは渡された値が有限数であるかどうかを判別します。

Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false
Number.isFinite(-Infinity); // false

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true
于 2015-12-28T07:56:05.853 に答える
10

シンプルn === n+1またはn === n/0動作:

function isInfinite(n) {
  return n === n/0;
}

ネイティブisFinite()は数値への入力を強制することに注意してください。isFinite([])isFinite(null)は両方ともtrue例えばです。

于 2013-12-16T10:06:05.657 に答える
2

実際には、n === n + 1は、51ビットより大きい数値に対して機能します。

1e16 + 1 === 1e16; // true
1e16 === Infinity; // false
于 2015-01-19T13:50:12.163 に答える
2

単純な古い比較を実行します。

(number === Infinity || number === -Infinity)

または複数の文字を保存するには:

Math.abs(number) === Infinity

これを使用する理由

  1. !(Number.isFinite(number))入力を中断しNaNます。
  2. Number.POSITIVE_INFINITYそしてNumber.NEGATIVE_INFINITY再定義することができます。それらは構成可能です。
  3. Infinitystrictモード-Infinity読み取り専用です。
  4. これが最短の解決策です。
于 2021-05-14T21:35:40.163 に答える
0

私は、読みやすさだけでなく、さまざまな防御的なコーディングの理由からLodashを使用するのが好きです。ES6は優れており、数値以外の値の問題はありませんが、ES6が不可能な場合は、すでにlodashがあるか、より短いコードが必要です: _. isFiniteNumber.isFinite

_.isFinite(Infinity); // false
_.isFinite(NaN); // false
_.isFinite(-Infinity); // false

_.isFinite(null); // false
_.isFinite(3); // true
_.isFinite('3'); // true
于 2019-09-30T23:46:29.027 に答える
-1

NaN値がまたはInfinityタイプであるかどうかを確認する必要があるシナリオに遭遇しましたが、有効な結果として文字列を渡します。多くのテキスト文字列は誤検知を生成するためNaN、これを回避するための簡単な解決策を作成しました。

  const testInput = input => input + "" === "NaN" || input + "" === "Infinity";

上記のコードは、値を文字列に変換し、それらがNaNまたはInfinityと厳密に等しいかどうかをチェックします(負の無限大の場合は別のケースを追加する必要があります)。

それで:

testInput(1/0); // true
testInput(parseInt("String")); // true
testInput("String"); // false
于 2019-09-30T21:37:37.047 に答える
-2

ウィンドウでisFiniteを使用できますisFinite(123)

次のような関数を書くことができます:

function isInfinite(num) {
 return !isFinite(num);
}

そして次のように使用します:

isInfinite(null); //false
isInfinite(1); //false
isInfinite(0); //false
isInfinite(0.00); //false
isInfinite(NaN); //true
isInfinite(-1.797693134862316E+308); //true
isInfinite(Infinity); //true
isInfinite(-Infinity); //true
isInfinite(+Infinity); //true
isInfinite(undefined); //true

Number.isFinitまた、値が数値であるかどうかを確認し、確認などのためにより正確であるかどうかを確認undefinedすることもできnullます...

または、次のようにポリフィルすることができます。

Number.isFinite = Number.isFinite || function(value) {
  return typeof value === 'number' && isFinite(value);
}
于 2018-05-31T14:37:37.557 に答える