购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 Number类型

3.2.1 认识Number类型

JavaScript规定:任何数字都是Number类型,无论它是整数还是小数,是正数还是负数,是较大数还是较小数。这个规定很重要,因为其他的编程语言,如Java、C++等,它们将数字分为多种类型,比如,整数被称为integer,小数被称为float等。记住:在JavaScript中,所有的数字只有一种类型,即Number类型。

书写下面的代码进行验证:

在这段代码中,我们用关键字typeof分别测试了数字的各种情况,包括整数、小数、较大数、较小数及负数,返回结果均为number。

3.2.2 Infinity和-Infinity

Infinity在JavaScript中是一个特殊数字,它的英文原意为“无穷大”,与数学中的Infinity的概念非常相似,用于表示我们无法理解的数字或无法表达的数字。当某个数字的值超过2 1024 时就会变为Infinity。简单地说,所有大于2 1024 的数字,在JavaScript中都被称作Infinity。

像“5e8800”(5乘以10的8800次方)这样的数字在JavaScript中就被认为是无穷大。比如:

在控制台对“5e8800”进行输出,输出结果为Infinity。

其实,JavaScript在不同浏览器中能够处理的数字范围并不相同,这不必深究,只需要记住,当某个数字过大时,它将变为Infinity。

读者可能会疑惑,在数学中将过大的数字称为正无穷,过小的数字称为负无穷,那JavaScript对过小的数字是怎样定义的呢?JavaScript的做法与数学相似,它将过小的数字定义为-Infinity,比如:

Infinity本质上是一个数字类型的值,是一个数值,也就是Number类型。书写测试代码:

从运行结果得知,Infinity无论正负,其都是Number类型的值。这里需要注意的是,Infinity不要加引号,否则它就变为字符串了。

3.2.3 多种进制

JavaScript中的数字默认为十进制,实际上我们也可以使用二进制、八进制、十六进制数字。不熟悉进制相关知识的读者也不用担心,因为前端开发中基本不会涉及非十进制数字。

1.二进制

二进制数字“逢二进一”,构成数字只能为0和1。表3-2列举了一些二进制数字和十进制数字的对应关系,当然如果读者了解“位权”相关知识,可以进行口算。

表3-2 一些二进制数字和十进制数字的对应关系

在JavaScript中,如果要使用二进制数字,则要以0b开头书写。比如,0b110等价于十进制数字中的6。比如:

可见,当在控制台输出二进制数字时,会自动显示它对应的十进制数字。

2.八进制

八进制数字“逢八进一”,构成数字只能为0、1……7。表3-3列举了一些八进制数字和十进制数字的对应关系。

表3-3 一些八进制数字和十进制数字的对应关系

续表

在JavaScript中,如果要使用八进制数字,则要以数字0开头书写。比如,017等价于十进制数字中的15。比如:

代码运行后,控制台会输出每个八进制数字对应的十进制数字。

需要注意的是,如果开启了严格模式,是不允许使用八进制方式表示数字的。比如,运行以下代码:

运行这段代码,控制台会报错,报错信息为Uncaught SyntaxError:Octal literals are not allowed in strict mode(严格模式下不允许使用八进制数字)。

3.十六进制

十六进制数字“逢十六进一”,构成数字只能为0、1……9、a、b、c、d、e、f。表3-4列举了一些十六进制数字和十进制数字的对应关系。

表3-4 一些十六进制数字和十进制数字的对应关系

在JavaScript中,如果要使用十六进制数字,则要以0x开头书写。比如,0xb等价于十进制数字中的11。比如:

代码运行后,控制台会输出每个十六进制数字对应的十进制数字。

3.2.4 特殊数值NaN

NaN也是JavaScript中的一个特殊数值,是英文“Not a Number”的缩写,原意为“不是一个数”。有趣的是,虽然NaN表示“不是一个数”,但它本身是Number类型:

运行代码后,控制台输出number,这证明了NaN是Number类型。需要注意的是,在这行代码中,不要给NaN加双引号,因为它本身就是一个值,如果加了双引号,它就会变为字符串类型,将完全改变NaN的意义。

NaN会在什么时候出现呢?JavaScript规定:算术运算如果难以产生普通数值结果,那么结果为NaN。比如:

上面代码的运行结果都是NaN。由于进行算术运算需要产生一个数值,但此时又没有一个对应的正常数值,因此只能返回NaN,用来表达不是一个正常数值的Number类型值。实际上,有经验的程序员在进行可能产生NaN的运算时(比如接收用户输入进行运算),会严格校验参与运算的数据的类型,从而不产生NaN。

NaN的特殊性不止于此,它还有非常特殊的一点:NaN不自等。在这里我们不做演示,将在4.5节对该性质进行验证。 k0F6y1pvsdVIKdvoARmHgqXxVT4t7qHjFiC0bAbcCK1DM53r0A3vChI+MBEE91up

点击中间区域
呼出菜单
上一章
目录
下一章
×