ホームページ >ウェブフロントエンド >フロントエンドQ&A >es6 数値オブジェクトの新しいメソッドは何ですか?

es6 数値オブジェクトの新しいメソッドは何ですか?

青灯夜游
青灯夜游オリジナル
2022-10-26 17:57:151483ブラウズ

es6 新しい数値メソッドは次のとおりです: 1. 指定された値が有限値かどうかを判断できる「Number.isFinite()」、2. 有限値かどうかを検出できる「Number.isNaN()」変数が NaN である; 3. 文字列を整数に変換できる「Number.parseInt()」; 4. 文字列を浮動小数点数に変換できる「Number.parseFloat()」; 5. 「Number.parseFloat()」 isInteger()」。値が整数かどうかを判断できます。

es6 数値オブジェクトの新しいメソッドは何ですか?

このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。

ES5では、グローバルのisFinite()、isNaN()メソッドに型変換があり、最終的な判定結果が曖昧になります。 ES6 では、数値判定をより堅牢にするために、Number オブジェクトに対して Number.isFinite () と Number.isNaN () という 2 つの新しいメソッドが提供されています。

Number.isFinite()


ES5 では、渡されるパラメータを決定するために使用されるグローバル isFinite() 関数があります。値が制限された数値であるかどうか。パラメータが文字列の場合は、まず数値に変換されてから検証されます。

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

isFinite(0);         // true
isFinite(2e64);      // true
isFinite('2e64');    // true

isFinite("0");       // true

上記のコードからわかるように、文字列も最初に数値に変換されてから判断されます。ES6 Number オブジェクトで提供される isFinite() はより堅牢で、類似しています。対照的に、このメソッドは数値以外のパラメータを数値に変換することを強制しません。つまり、有限の数値のみが true を返します。

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

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true
Number.isFinite('2e64');	// false

Number.isFinite('0');       // false

Number.isNaN()


JavaScript の他の値とは異なり、NaN は等価演算子 ( = = および ===)、NaN == NaN と NaN === NaN は両方とも false を返すためです。したがって、値が NaN であるかどうかを判断する必要があります。

1. NaN 値の生成

NaN は、算術演算の結果が未定義または表現できない値を返したときに発生します。ただし、NaN は、値が表現範囲外にあることを示すために必ずしも使用されるわけではありません。

  • 数値以外の値を強制的に数値に変換すると、NaN が返されます。

  • 0 0 で割ると NaN が返されますが、他の数値を 0 で割ると NaN は返されません。

Number() メソッドを型変換に使用できることはわかっています。NaN への強制型変換の例を次に示します。上記の例では、強制型変換により値が NaN に変換される例が多くありますが、このような値を判断するのは間違いなく問題です。 isNaN() の問題を見てみましょう。

2. isNaN () の問題

#デフォルトでは、メソッド isNaN () はグローバルに存在し、それが NaN 値であるかどうかを判断するために使用されます。 Numeric 型のパラメータを受け取る必要がありますが、パラメータが Number 型でない場合、isNaN 関数はまずパラメータを数値に変換し、変換結果が NaN であるかどうかを判断します。

例:

Number(undefined)				// NaN
Number('undefined')				// NaN
Number('string')				// NaN
Number({})						// NaN
Number('10,3')					// NaN
Number('123ABC')				// NaN
Number(new Date().toString())	// NaN

NaN がどのように生成されるかを示す上記の例の結果と組み合わせると、戻り値が true であるかどうかを判断するために isNaN を使用したことは、明らかに私たちが行った結果ではないことがわかります。欲しい。このような問題に対応して、ES6 にはパッチが適用されました。ES6 の isNaN メソッドを見てみましょう。

3. Number.isNaN () の詳細

ES6 は Number.isNaN(x) を提供し、このメソッドを通じて変数 x が NaN であるかどうかを検出します。 be 評価対象の値をキャストしない信頼性の高いアプローチ。

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN('undefined')// true
isNaN({});        // true

isNaN(true);      // false
isNaN(null);      // false
isNaN(37);        // false

// strings
isNaN("37");      // false: 可以被转换成数值37
isNaN("37.37");   // false: 可以被转换成数值37.37
isNaN("37,5");    // true
isNaN('123ABC');  // true:  parseInt("123ABC")的结果是 123, 但是Number("123ABC")结果是 NaN
isNaN("");        // false: 空字符串被转换成0
isNaN(" ");       // false: 包含空格的字符串被转换成0

// dates
isNaN(new Date());                // false
isNaN(new Date().toString());     // true

isNaN("imooc")   // true: "blabla"不能转换成数值
                 // 转换成数值失败, 返回NaN

上記の例では、既存のプログラムのすべての状況が基本的にカバーされており、global isNaN() を使用することに起因する問題は発生しません。 NaN かどうかを判断するには、Number.isNaN(x) メソッドを使用することをお勧めします。 Number.isNaN 関数がサポートされていない場合は、式 (x != x) を使用して、変数 x が NaN であるかどうかを検出できます。これにより、信頼性が高くなります。

Number.parseInt()&Number.parseFloat()

メソッドの統一性を維持するために、グローバル parseInt () と parseFloat() は ES6 Number オブジェクトに移植されます。


ES6 の Number オブジェクトで提供されている 2 つの関数 Number.isFinite () と Number.isNaN () は同じですが、Number のこれら 2 つのメソッドがグローバルにのみ移植されていることを証明するにはどうすればよいでしょうか?次の例に示すように、=== 演算子を使用して判断できます。

Number.isNaN(NaN);        // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0)       // true

// 下面这几个如果使用全局的 isNaN() 时,会返回 true。
Number.isNaN("NaN");      // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
Number.isNaN(undefined);  // false
Number.isNaN('undefined');// false
Number.isNaN({});         // false
Number.isNaN("blabla");   // false

Number.isNaN(true);   	 // false
Number.isNaN(null);   	 // false
Number.isNaN(37);   	 // false
Number.isNaN("37");   	 // false
Number.isNaN("37.37");	 // false
Number.isNaN("");   	 // false
Number.isNaN(" ");   	 // false

上記のコードによって返された結果はすべて true であり、これら 2 つの関数がグローバル関数と同じであり、変わっていない。具体的な使用方法については、ES5 の parseInt() および parseFloat() 関数を参照してください。

Number.parseInt === parseInt;				// true
Number.parseFloat === parseFloat;		// true

グローバル メソッドを徐々に減らし、言語を徐々にモジュール化するために、これら 2 つのグローバル メソッドを Number オブジェクトに移植します。

Number.isInteger()

この関数を学習する前に、値をどのように判断するかを復習しましょう。整数の場合はどうでしょうか?


1、判断一个值为整数

一种方法是:任何整数都会被 1 整除,即余数是 0。利用这个规则来判断是否是整数。就有如下函数:

function isInteger(value) {
	return typeof value === 'number' && value%1 === 0;
}
isInteger(5) 		// true
isInteger(5.5) 	// false
isInteger('') 	// false
isInteger('8') 	// false
isInteger(true) // false
isInteger([]) 	// false

另一种方法是:使用 Math.round、Math.ceil、Math.floor 判断,因为整数取整后还是等于自己。利用这个特性来判断是否是整数,使用 Math.floor 示例,如下:

function isInteger(value) {
	return Math.floor(value) === value;
}
isInteger(5) 		// true
isInteger(5.5) 	// false
isInteger('') 	// false
isInteger('8') 	// false
isInteger(true) // false
isInteger([]) 	// false

上面的两种方法算是比较常用的判断方式,其他的一些方式都存在一些问题,这里就不一一列举了。但是,这两种方法都不够简洁,ES6 把判断整数提升到了语言层面,下面我们来看下 Number.isInteger() 的使用。

2、Number.isInteger () 的用法

Number.isInteger() 是 ES6 新增的函数,用来判断给定的参数是否为整数。

Number.isInteger(25) // true
Number.isInteger(25.1) // false

如果被检测的值是整数,则返回 true,否则返回 false。注意 NaN 和正负 Infinity 不是整数。

Number.isInteger(0);         // true
Number.isInteger(1);         // true
Number.isInteger(-100000);   // true

Number.isInteger(0.8);       // false
Number.isInteger(Math.PI);   // false

Number.isInteger(Infinity);  // false
Number.isInteger(-Infinity); // false
Number.isInteger("100");     // false
Number.isInteger(true);      // false
Number.isInteger(false);     // false
Number.isInteger([1]);       // false

上面的代码基本涵盖了 JavaScript 中的值的判断,在一些不支持 ES6 语法的浏览器中可以使用上面的两种方式进行 Polyfill 处理。

Number.isSafeInteger()


Number.isSafeInteger() 是 ES6 新增的函数,用来判断传入的参数值是否是一个 “安全整数”(safe integer)在数值扩展的 小节 我们介绍了最大安全整数和最小安全整数,不记得的同学可以跳过去看看。

一个安全整数是一个符合下面条件的整数:

  • 可以准确地表示为一个 IEEE-754 双精度数字;

  • 其 IEEE-754 表示不能是舍入任何其他整数以适应 IEEE-754 表示的结果。

比如,2e53 - 1 是一个安全整数,它能被精确表示,在任何 IEEE-754 舍入模式(rounding mode)下,没有其他整数舍入结果为该整数。作为对比,2e53 就不是一个安全整数,它能够使用 IEEE-754 表示,但是 2e53 + 1 不能使用 IEEE-754 直接表示,在就近舍入(round-to-nearest)和向零舍入中,会被舍入为 2e53。

安全整数范围为 -(2e53 - 1)到 2e53 - 1 之间的整数,包含 -(2e53 - 1)和 2e53 - 1。

Number.isSafeInteger(3);                    // true
Number.isSafeInteger(Math.pow(2, 53))       // false
Number.isSafeInteger(Math.pow(2, 53) - 1)   // true
Number.isSafeInteger(NaN);                  // false
Number.isSafeInteger(Infinity);             // false
Number.isSafeInteger("3");                  // false
Number.isSafeInteger(3.1);                  // false
Number.isSafeInteger(3.0);                  // true

【相关推荐:javascript视频教程编程视频

以上がes6 数値オブジェクトの新しいメソッドは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。