首页 > Note > JavaScript中的数据类型转换

JavaScript中的数据类型转换

2017年10月3日 发表评论 阅读评论

这里总结了JavaScript中常见的数据类型转换

1 字符串 to 数值

显式转换

通常的做法是使用 Number()parseInt() , parseFloat() 函数。需要注意的是, Number() 的参数不能含有非数字字符串值 ,如 Number(100x) 会得到 Nan, 而 parseInt(), parseFloat() 则是参数的第一个字符不可以是非数字,否则会得到 Nan, 而且它会忽略第一个非数字的字符串之后的所有字符。

js>Number<('100x')
NaN
js>parseInt('100x')
100
js>parseFloat('100x')
100
js>parseInt('10d20x')
10
js>parseFloat('10d20x')
10
js>Number('10d20x')
NaN
js>parseInt('a10d20x')
NaN
js>parseFloat('a10d20x')
NaN
js>Number('a10d20x')
NaN

对于 parseInt() 函数来说,可以指定进制。早期版本的 JavaScript 默认执行 8 进制转换,而新版本使用 10 进制 进行转换。如果需要保证兼容性,则需要带上第二个参数:

js>parseInt('11',2)
3
js>parseInt('11',3)
4
js>parseInt('11',4)
5
js>parseInt('11',8)
9
js>parseInt('11',10)
11
js>parseInt('11',16)
17

隐式转换

数值的字符串变量(指可以通过 Number函数转换为数值的字符串,本节中的字符串均指可以通过 Number() 转换为数值的字符串) 在遇到数值运算符时可能发生隐式转换:

对于减法运算,总是可以转换为数值 :

js>var arr = ['100' - 1, '100' - '1', '100' - '', 100 - '1']
js>for(i in arr){console.log(arr[i],typeof(arr[i]))}
99 "number"
99 "number"
100 "number"
99 "number"

对于加法运算,如果两个操作数中有一个为字符串,则结果会转换成字符串 :

js>var arr = ['100' + 1, 1 + '100']
js>for(i in arr){console.log(arr[i],typeof(arr[i]))}
1001 string
1100 string

这是因为此时 “+” 的意义为字符串连接操作符。

不过还有一种情况:

js>typeof +'100'
"number"

此时 “+” 运算符没有实质的意义,其作用就仅仅是将字符串值转换为数值。

2 数值 to 字符串

显式转换

通常是使用 String() 函数 或 toString() 函数

js>typeof String(100)
"string"
js>typeof (100).toString()
"string"

注意,在使用字面量直接调用 toString() 函数的时候, 为了避免点号到底是小数点还是点运算符,我们需要给字面量加上括号。

隐式转换

如上节所示,使用 “+” 运算符可以将数值隐式地转换为字符串:

js>'s' + 100
"s100"
js>100 + 's'
"100s"
js>100 + ''
"100"

3 字符串<->数值 转换的惯用法

从前两节可以看到字符串和数值之间的类型转换有多种方法。具体到哪种方法速度更快,不能一概而论,这要看具体的实现。使用显式转换可读性更好,而使用隐式转换代码更简洁更有利于传输。一般我们会使用空字符串来进行隐式地转换:

js>100 + ''   //数值转换为字符串
"100"
js>"100" - ''    //字符串转换为数值
100

4 转换为布尔型

在 javaScript 的条件语句中(如 `if`, `while` 语句),任何值都将被转换为布尔类型。

下面这种情况将会被转换成 false :

  • 数值 0
  • 数值 Nan
  • null 值
  • undefine 值
  • 空字符串值 ”

除此之外的其他情况将会被转换成 true

还可以使用 Boolean() 来进行显式转换,或者使用 逻辑非运算符 ‘!’ 来进行转换:

js>var b = !!1
true
js>var b = !!''
false

5 Object 类型 to 基本类型

假设 obj 为一个 Object 类型的对象,则有:

  • String(obj) 将调用 toString(obj) 方法
  • Number(obj) 将优先调用 valueOf(obj) 方法,如果 valueOf(Obj) 的结果无法被转换为数值型,则再调用 toString(obj) 方法
  • Boolean(obj) 总是 true

如下示例:

js>var obj = {} 
js>String(obj)
"[object Object]"
js>obj.toString = function(){return 'Hi'}    //重写 toString() 方法
js>String(obj)
"Hi"
js>obj + ''    //隐式转换
"Hi"

6 基本类型 to Object 类型

基本类型转换为 Object 类型一般使用其对应的类,如字符串使用 String 类,数值使用 Number 类, 布尔使用 Boolean

js>var s = 'Hi'
js>var obj = new String(s)

 

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.