JavaScript基础之数值

有一阵子没更新博客了,前阵因为忙于手头的项目导致没有继续学习,不过说实在的其实也是借口,有句话说的好,时间就像乳沟挤一挤总还是有的:)。在这里小检讨一下,以后还是争取尽快完成JavaScript学习,早点上路做点实在的东西出来,这样才能形成好的循环,不断激励自己前进。

今天就来说一说JavaScript中的数值吧。

Number类型

JavaScript定义了Number数据类型,用来保存所有的数值,包括整数和浮点数,支持各种字面量格式。比如最基本的就是十进制整数:

var intNum = 55; //十进制整数
当然了,也可以支持八进制和十六进制的字面值,和其它语言一样,八进制字面值以0起始后面为0-7数字序列,十六进制则以0x起始后面为0-9和A-F,字母可以大写也可以小写。如下所示:
var octalNum = 070; //八进制的56
var hexNum = 0x1F; //十六进制的31

浮点数也可以保存,由于保存浮点数的内存空间是整数的两倍,因此JavaScript在必要的时候会将浮点数转换为整数,比如var floatNum = 10.0,10.0实际上等同于整数10,因此会被自动转换。另外JavaScript支持使用科学计数法来表示数值,也就是e表示法,用e表示法表示的数值等于e前面的数值乘以10的指数次幂,下面是e表示法的例子:

var floatNum = 3.125e7 //等于31250000

数值范围

由于内存的限制,JavaScript并不能保存世界上所有的数值,JavaScript能够表示的最小数值保存在Number.MIN_VALUE中,能够表示的最大数值保存在Number.MAX_VALUE中,这两个值是足够小和足够大的,但是也不能排除在某些情况的计算下我们的数值跨过了这个范围,JavaScript将得到一个特殊的计算结果,就是Infinity值,并且这个结果值无法再参与计算,这个是可以理解的,已经超出范围自然无法再参与计算。这样在某些时刻我们需要判断一个数值是否超出存储范围,JavaScript提供了函数isFinite()来判断,这个函数在参数位于最小与最大数值之间时会返回true,如下所示:

var result = Number.MAX_VALUE+Number.MAX_VALUE;
alert(isFinite(result)); //显示false

NaN

NaN又是JavaScript中的一个特殊的值,NaN就是Not a Number的意思,这个值是用来表示一个本来要返回数值的操作未返回数值的情况。比如在其它语言中,任何数值除以0会导致错误,但在JavaScript中则不会,任何数值除以0会返回NaN,因此代码可以继续往下执行。NaN有两个特别的特点,首先是任何涉及NaN的操作结果都是NaN(例如NaN/10结果就是NaN),其次NaN与任何值都不相等,包括NaN本身,NaN == NaN会返回false。JavaScript同样定义了一个isNaN()函数来帮我们判断一个值是否是NaN,函数的参数可以是任何类型,函数的真实涵义就是判断找个参数是否不是一个数值。isNaN在接收一个值后会尝试将这个值转换为数值,如果一个值能够被转换为数值则函数返回false,如果不能转换为数值的话则函数返回true,可以看看下面的例子:

alert(isNaN(NaN)); //true
alert(isNaN(10)); //false
alert(isNaN("10")); //false,字符串10可以转换为数值10
alert(isNaN("blue")); true
上面的例子第一个值是NaN自然返回true,而数值10本身是数值因此返回false,字符串"10"可以转换为数值10因此也返回false,而字符串"blue"不能转换成数值,因此返回true。这里引出了一个新概念,数值转换,JavaScript可以将各种类型的值转换为数值,下面就将介绍数值转换。

数值转换

很多时候我们也许需要将一些类型的值转换成数值并进行计算,因此JavaScript提供了转换函数,分别为Number(),parseInt(),parseFloat()。第一个函数可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。Number函数比较复杂,因为可以支持任意类型的参数,因此自然有比较复杂的转换规则,规则如下:

如果参数是Boolean值,则true被转换为1,false将被转换为0

如果参数是数值则简单返回传入的数值即可

如果是null值则返回0

如果是undefined则返回NaN

如果是字符串则按这样处理,如果字符串只有数字则将其转换为十进制数值,忽略0起始的0,如果字符串是有效的浮点格式则转换成对应的浮点数值,如果是十六进制的格式则转换为相同大小的十进制数值,如果字符串是空则返回0,如果字符串不符合数值格式则返回NaN

如果参数是对象,则先调用对象的valueOf方法,然后以上述的规则转换返回的值,如果转换的结果是NaN则调用对象的toString方法,再以上述的规则转换返回的字符串值。

Number函数转换数值比较复杂,但因为可以接受任意类型参数,因此还是有用的。不过如果是对字符串进行转换一般来讲应该使用parseInt()函数,parseInt()函数在转换时会依次检索每个字符,如果发现第一个字符不是数字或者负号的话则直接返回NaN,如果是的话则继续检索直到解析完所有字符或者遇到一个非数字字符。因此"1234red"会被转换成1234,因为red会被忽略,类似的浮点数字符串“33.6"会被转换成33,因为小数点不是有效的数字字符。需要说明的是parseInt()遇到0开头的字符串会将字符串做为一个八进制的数来转换,不像Number函数,而如果遇到0x开头则会做为十六进制数进行转换。另外parseInt()函数还有第二个参数,即转换时使用的基数也就是多少进制。这会影响到转换的结果,比如:

var num1 = parseInt("10", 2); //2
var num2 = parseInt("10", 8); //8
var num3 = parseInt("10", 10); //10
var num4 = parseInt("10", 16); //16
由于指定基数的不同,我们对同样的字符串转换后得到的数值是不同的,因此在实际使用时因根据字符串的组成来源来判断使用哪个基数。

最后要介绍的是parseFloat函数,与parseInt基本类似,但是parseFloat可解析浮点数格式的字符串,因此在解析时字符串中有一个小数点是合法的,但第二个小数点则是无效的了,其后的字符串也将被忽略。另外还有一个区别就是parseFloat没有第二个参数,仅处理十进制数,如果传入十六进制格式的字符串则被转换为数值0,0起始的字符串则忽略0,最后如果字符串是可以被转换为整数的话,parseFloat返回的是一个整数。

好了,关于JavaScript中的数值类型主要就是这些内容啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值