Javascript数值转化详解!!!

通过对书籍的阅读,对数值转化这一方面有了更深的了解。

我们都知道,有三个函数可以把非数值转化为数值:Numder()、parseInt()、parseFloat()。

(1)Number()可以用于任何类型(2)另两个函数则专门用于把字符串转化为数值。这三个函数对于相同的输入存在着返回不同的结果。

首先,让我们来讨论Numder()函数的转换规则:

Boolean值true和false分别被转化为1和0
数字值没有任何改变
null返回0
undefined返回NAN
对象调用对象的valueof()方法,按照规则转化返回的值。如果转化结果为NAN,则调用对象的toString()方法,然后按照前面的规则转换返回的字符串

而对于字符串我们又在这其中分为以下几个规则:

只包含数字(包括前面是正负号)转化为十进制数值。例如:"1"转化为1,"011"转化为11(前面的先导0被忽略了)
包含有效的浮点格式例如:“01.1”转化为1.1(同样会忽略前面的先导0)
包含有效的十六进制格式例如:“0x1”转化为1(将其转化为相同大小的十进制整数值
字符串为空 ""将其转化为0
包含除上述格式之外的字符

将其转化为NAN

让我们举几个例子吧:

Number("demo")    //NAN      Number("")    //0           Number("00001")   //1(忽略先导0)      Number(true)    //1

事实上,一元操作符的操作与Number()函数相同

对于Number()函数,想必大家都是抱有疑问的吧。例如,若我们希望能够识别先导0来以此转化为八进制或者十六进制,该怎么做呢?

这是parseInt()函数就上场了,在处理整数的时候我们更常用的就是这个函数。

parseInt()函数在转换字符串的时候,更多的时候是看其是否符合数值模式。

(1)它会忽略字符串前面的空格,直到找到第一个非空格字符。

(2)如果第一个字符不是数字字符或负号,将会直接返回NAN。(parseInt()转化""会返回NAN,而Number()返回0)

(3)如果第一个字符是数字字符,它将会继续解析,直到解析完成或遇到了非数字字符。例如:"1234hello"会被转化为1234.

(4)parseInt()也能识别各种整数格式(解决了刚才的问题),例如如果以"0x"开头,将会将其当做十六进制进行解析。

下面给出一些例子:

parseInt("123ddd")  //123     parseInt("") //NAN   parseInt("0xA")  //10  parseInt("22.5") //22

然而对于parseInt()解析像八进制字面量的字符串时,ECMAScript 3和5是存在分歧的。例如:parseInt("070");

在ECMAScript 3中认为是56(八进制),在ECMAScript 5中 认为是70(十进制,忽略了前面的0),因此在ECMAScript 5中已经不具有解析八进制的能力,为了解决这样的困惑,我们为这个函数提供了第二个参数:转换时使用的基数。

例如:parseInt("0xAF",16) //175  (事实上,因为已经指定了转换的基数,因此也不用写前面的"0X",parseInt("AF",16)所返回的值也是175。

需要注意的是,相同的字符串,面对不同的基数会有不同的输出结果。因此为了避免错误,我们建议无论在什么情况下都明确指定基数。

最后让我们来谈谈parseFloat()这个函数:

parseFloat()与parseInt()很类似,不同的是:

对于parseFloat():

1)字符串的第一个小数点是有效的,而第二个小数点是无效的,因此它后面的字符串将会被忽略。

(2)它始终忽略前导的0,也就是它只能解析十进制,也没有第二个参数

需要注意的是:对于字符串是一个可解析为整数的数(无小数点或小数点后为零),均会返回整数。

下面给几个例子:

parseFloat("123dd") //123    parseFloat("0xA") //0   parseInt("22.5.1") //22.5   parseInt("21.000") //21

经过以上的回顾与复习,我来进行一下总结:

(1)对于Number()与parseInt()、parseFloat(),第一个区别是第一个函数可以用于任何数据类型,而后两个是专门针对字符串的

(2)

1.对于字符串内包含字母或其他(除""外),Number函数时直接返回NAN,而parseInt和parseFloat函数是看字符串内前面的第一个字符是否为数字字符,只要第一个是数字字符,就可返回相应的数字。

2.对于"",Number返回0,而其他两个函数时返回NAN。

(3)对于parseInt,我们可以根据第二个参数,即指定的基数,来决定输出什么值。

以上是我对数值转化部分的粗略总结,均来自对JAVAScript高级程序设计(第3版)的理解与总结

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值