Number.isFinite(), Number.isNaN()

Number.isFinite(), Number.isNaN()

ES6 在Number对象上,新提供了Number.isFinite()Number.isNaN()两个方法。

Number.isFinite()用来检查一个数值是否为有限的(finite)。


  1. Number.isFinite(15); // true
  2. Number.isFinite(0.8); // true
  3. Number.isFinite(NaN); // false
  4. Number.isFinite(Infinity); // false
  5. Number.isFinite(-Infinity); // false
  6. Number.isFinite('foo'); // false
  7. Number.isFinite('15'); // false
  8. Number.isFinite(true); // false

ES5 可以通过下面的代码,部署Number.isFinite方法。


  1. (function (global) {
  2. var global_isFinite = global.isFinite;
  3. Object.defineProperty(Number, 'isFinite', {
  4. value: function isFinite(value) {
  5. return typeof value === 'number' && global_isFinite(value);
  6. },
  7. configurable: true,
  8. enumerable: false,
  9. writable: true
  10. });
  11. })(this);

Number.isNaN()用来检查一个值是否为NaN


  1. Number.isNaN(NaN) // true
  2. Number.isNaN(15) // false
  3. Number.isNaN('15') // false
  4. Number.isNaN(true) // false
  5. Number.isNaN(9/NaN) // true
  6. Number.isNaN('true'/0) // true
  7. Number.isNaN('true'/'true') // true

ES5 通过下面的代码,部署Number.isNaN()


  1. (function (global) {
  2. var global_isNaN = global.isNaN;
  3. Object.defineProperty(Number, 'isNaN', {
  4. value: function isNaN(value) {
  5. return typeof value === 'number' && global_isNaN(value);
  6. },
  7. configurable: true,
  8. enumerable: false,
  9. writable: true
  10. });
  11. })(this);

它们与传统的全局方法isFinite()isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()对于非数值一律返回false,Number.isNaN()只有对于NaN才返回true,非NaN一律返回false


  1. isFinite(25) // true
  2. isFinite("25") // true
  3. Number.isFinite(25) // true
  4. Number.isFinite("25") // false
  5. isNaN(NaN) // true
  6. isNaN("NaN") // true
  7. Number.isNaN(NaN) // true
  8. Number.isNaN("NaN") // false
  9. Number.isNaN(1) // false

你可能感兴趣的:(ES6标准入门)