基础类型之 Number(一)

导读:Number 类型也是 ECMAScript 中非常重要的基本类型之一。在官方文档中,它将 Number、全局对象 Date 和 Math 放在了一起。那么我们索性就一块讲了吧。这节内容不多,也是非常容易掌握的。主要的是我们常使用的方法。

Number 构造函数

按照惯例,我们还是一开始就讲讲这个东西。经过前面的学习,这里的东西就不再讲的那么细了。大家应该一看就能理解。

Number 构造函数是 %Number% 内部对象和全局对象的 Number 属性的初始值。当作为构造函数调用时,它创建并初始化一个新的 Number 对象。 当 Number 作为函数而不是作为构造函数调用时,它将执行类型转换。
Number 构造函数设计为可子类化。 它可以用作类定义的 extends 子句的值。 打算继承指定的 Number 行为的子类构造函数必须包含一个对 Number 构造函数的 super 调用,以使用 [[NumberData]] 内部插槽创建和初始化子类实例。

第一段话很好理解,就是我们平时创建 Number 对象的定义;关于第二段话呢,实际上也是对于 ES6 新特性的附加,当我们学习到 Class 的时候,再来理解也不迟。

与 String 类型一致,Number 构造函数的 [[Prototype]] 同样也是指向 %FunctionPrototype% 的。

那么我们接下来就讲解 Number 构造函数的方法吧。

(1)Number.isFinite ( number )

概述:该用来检测传入的参数是否是一个有穷数。

内部的解释过程如下:

如果传入的值不为 Number 类型,则返回 false;如果传入的值为 NaN,+∞ 或 -∞ 时,也返回 false;否则,返回 true

代码形式:

console.log( Number.isFinite(123) );  // true
console.log( Number.isFinite('Hello') );  // false
console.log( Number.isFinite(NaN) );  // false
console.log( Number.isFinite(-Infinity) );  // false

这里需要注意:在 Number 类型中,正无穷表示为 Infinity(或 +Infinity);负无穷表示为 -Infinity

(2)Number.isInteger ( number )

概述:该方法用来判断给定的参数是否为整数。

内部的解释过程如下:

如果传入的值不为 Number 类型,则返回 false;如果传入的值为 NaN,+∞ 或 -∞ 时,也返回 false;内部调用 ToInteger() 方法,如与传入的参数不相等,则返回 false;否则,返回 true

那我们来谈谈这个 方法是什么原理。不知道有没有聪明的小伙伴想到啦?

没错,内部调用的这个方法就是 —— **floor (abs(number)) **。

很简单吧?我们掌握了语言内部的组织和解释过程,对于我们理解所调用的方法帮助多大啊!大家记住上面这个表达式就可以装逼啦!咳咳。。。低调低调。

代码形式:

console.log( Number.isInteger(123) );  // true
console.log( Number.isInteger(123.45) );  // false
console.log( Number.isInteger(NaN) );  // false

简化此判断过程后可写成如下函数:

function isInteger (number) {
    if (number === Math.floor(Math.abs(number))){
        return true;    
    }
}
console.log( isInteger(123) );  // true

现在,我相信你们一定是学会啦。

(3)Number.isNaN ( number )

概述:该方法用来检测传入的值是否是 NaN。该方法比传统的全局函数 isNaN() 更可靠。

对于为什么不使用 isNaN() 函数。

MDN 中对此有一个比较好的解释:

在 JavaScript 中,NaN 最特殊的地方就是,我们不能使用相等运算符(== 和 ===)来判断一个值是否是 NaN,因为 NaN == NaN 和 NaN === NaN 都会返回 false。因此,必须要有一个判断值是否是 NaN 的方法。 和全局函数 isNaN() 相比,该方法不会强制将参数转换成数字,只有在参数是真正的数字类型,且值为 NaN 的时候才会返回 true。

该函数内部的解释过程:

如果传入参数不是 Number 类型,返回 false;只有在参数等于 NaN 时,才返回 true;其它一律返回 false

本教程就是告诉你。你为什么这么做,同时,这么做到底有什么好处!我们就是本着打破砂锅问到底的精神来学习不是吗?

为什么不使用 isNaN() 函数?因为它内部的解释过程是这样的:

将参数在内部执行 ToNumber() 方法,将其转换为 Number 类型;如果为 NaN,则返回 true;其它一律返回 false

这下我们就知道了它为什么不靠谱,它还要在内部进行一次转换,依次寻找对应类型,再转换。这就等于多了一个步骤。

所以我们以后使用 Number.isNaN() 方法来代替原来的全局函数。这里的关键点是:不要忘记了在前面加上** Number.**,不然就变成了调用另一个全局函数了哦~

(4)Number.isSafeInteger ( number )

概述:Number.isSafeInteger() 方法用来判断传入的参数值是否是一个“安全整数”(safe integer)。

这个方法,想必我们也不常用,但是我们需要知道什么是“安全整数”。

在 ECMAScript 语言中,只有在 -253-1 到 253-1 之间的整数(包含这两个整数),才能够被精确表示,而关于 Number 类型是双精度浮点数这些知识点我就不深入讲了。

我们简单的认为内部的解释过程是:abs(integer) ≤ 253-1 时,才返回 true。这就足够了。

(5)Number.MAX_SAFE_INTEGER、Number.MAX_VALUE、Number.MIN_SAFE_INTEGER、Number.MIN_VALUE

概述:这四个函数我们平时也不怎么会用到。所以我简单说下它们分别代表什么意思吧。

Number.MAX_SAFE_INTEGER :它的值就是 9007199254740991 (253-1)。
Number.MAX_VALUE :它的值是 Number 类型的最大正有限值,也就是约为 1.7976931348623157 × 10308
Number.MIN_SAFE_INTEGER :它的值就是 -9007199254740991 (-253-1)。
Number.MIN_VALUE :它的值是 Number 类型的最大正有限值,也就是约为 -1.7976931348623157 × 10308

(6)Number.NaN

概述:该方法的值就是 NaN。

我们需要使用 NaN 时,可以使用 Number.NaN 代替。这显得更加严谨。如果我没记错的话,这也是 ES6 中新添加的吧,如果错了赶紧告诉我哈。

与下面的两个方法一样,这看出了 ECMAScript 组委会的心思,他们想要最大程度的削减全局函数的使用。个人认为,在未来我们使用的方法都是(Object.prototype 中定义)和函数(Function.prototype 中定义)中的。而全局函数和全局变量将会退出历史舞台。

(7)Number.parseFloat ( string )、Number.parseInt ( string, radix )

概述:Number.parseFloat() 方法可以把一个字符串解析成浮点数;Number.parseInt() 方法可以根据给定的进制数把一个字符串解析成整数。

这两个方法与全局的 parseFloat()parseInt()方法一致。

Number.parseFloat() 方法可以仅将字符串的前导部分解释为数值:

console.log( Number.parseFloat('123abc') );  // 123

Number.parseInt() 方法可以把一个字符串解析成整数:

// 这里的 8 表示解析为 8 进制
console.log( Number.parseInt('60',8) );  // 48

如果解析的不正确,那么会返回 NaN:

console.log( Number.parseFloat('abc') );  // NaN
console.log( Number.parseInt('a',8) );  // NaN

(8)Number.NEGATIVE_INFINITY、Number.POSITIVE_INFINITY

概述:这两个方法用来表示 -∞ 和 +∞。

这个很好理解吧。这个记住就好啦。

总结

这一小节将 Number 类型的构造函数方法都讲了。看看,也就这么点东西。下一节将要讲述原型方法了。

    原文作者:Hushaby丶
    原文地址: https://www.jianshu.com/p/6cdfdbccd8a9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞