Javascript:常见的数据转换及取巧方法

本文属于《Javascript基础纪要》系列文章

诸如将字符串’1’转换成数字1,就叫数据类型转换了。数据类型转换是比较简单的事情,只是有些取巧的办法可以节省代码。

我先假设转换前的数据做为变量a,转换后的是b.

任何类型转成字符串

最简单的办法就是b=a+”.

当然你也可以使用b=String(a).

纯数字的字符串转成number

纯数字组成的字符串是这种:’12311′

最简单的办法是b=a-0,也可以使用b=Number(a)

带字母的字符串转成number

有字母有数字的字符串,经常碰到,特别是从css里取元素坐标的时候:12px

我们要用的是12,而这个转换没什么简单的办法,就是用最原始的办法:b=parseInt(a,10)

进制转换

如十进制转成2进制,8进制,16进制;或者反过来。

这里要注意的是,十进制是一个很重要的角色,parseInt的转换结果,始终是十进制的数字。

而parseInt有第2个参数,他的作用是:指明当前字符串的进制。比如,你要把十六进制的’abcdef’转成十进制的数字,你最好这样parseInt(‘abcdef’,16)。其他进制的字符串转成十进制也是类似。

十进制转成其他进制,就得用toString了。如12345..toString(16)。

这里有两个.可不是我打多了一个哈。因为JS里面,数字后的第一个点会被当作小数点看待。所以直接12345.toString(16)是会报错的。

下面问题来了:怎么把2进制转成16进制?

直接转?对不起没这个方法,我们要先把2进制转成10进制,再从10进制转成16进制,具体代码就不写了。

小数转成整数

需要用到这个转换的,通常是要把JS计算出来的结果赋给DOM元素时。最常用的方法就是JS原生的三个Math下的方法了:floor,ceil,round.

不过floor和ceil,大家一定要注意负数时的情况,比如Math.floor(-2.678),会得到-3而不是-2,因为floor是取最小的整数。

而除了以上3个方法,还有两个直接去掉小数位的方法,即位运算符:2.678|0与2.678>>0。这两个方法需求代码量更少,结果与floor一致。

但是要注意,|与>>运算符,在用到负数上时,是往大的取而不是和floor一致了,因为,它们只是单纯的直接去掉小数位

转成指定位数的小数

前提当然是数字类型才能转换成小数,而且数字转换成小数是Number类型自带的方法toFixed。

使用方法10..toFixed(2)或(10).toFixed(2)。

toFixed的参数是要保留的小数位数。

toFixed可以把整数转成小数,也可以把多位小数转成指定位数的小数。如(10.1232).toFixed(2)。

另外,toFixed有个小问题就是四舍五入处理得不是很准,大家感兴趣的可以搜索一下,但这个问题可以无视

类数组对象转换成数组

类数组对象是指数据排列像是数组,也可以循环,但却没有数组原生方法的对象。如获取到的DOM元素集,参数集arguments.

最简单的办法是:b=Array.prototype.slice.call(a);这也是效率最高的。

如果不用上面的办法,你也可以新建一个空数组,然后循环类数组对象,把它的元素一个个放进数组里去。但这种方式就麻烦得紧了。

数组转成字符串

用得最多的当然是数组原生的join方法了。

但如果你对数组元素之间的间隔字符没有要求的话,也可以用数组的toString()方法,会默认组成一个由,分隔元素的字符串。

而toString的取巧用法,就是 [1,2,3]+”,跟前面说的:任何类型转成字符串的方法一样。

发表评论

电子邮件地址不会被公开。