JavaScript数据类型转换详解

210 阅读3分钟

JavaScript中经常需要对数据进行操作,比如数据类型的转换或常见的加减乘除操作,这里面就会涉及到不同数据类型的转换,主要有两类:强制类型转换 和 自动类型转换

强制类型转换

强制类型装换主要使用Number,String,Boolean三个函数,他们把各种数据类型分别手动的转换为数字,字符串,和布尔类型

var a = '123' // string
var b = Number(a) // number
var c = Boolean(a) // boolean
其他的数据类型转化为String
    1. toString()方法 // 数组,函数和基本类型的包装类型对toString都进行了重写
    1. String()方法
其他的数据类型转化为Number
    1. 使用Number()函数
    1. 使用parseInt()和parseFloat()
其他的数据类型转化为Boolean

它的转换规则相对简单,只有空字符串,undefined,null,+0,-0,NaN转化为false,其他的都被转化为true

Boolean('') // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(0) // false
Boolean(NaN) // false

空数组和空对象也都会返回true,甚至连false对应的布尔对象也返回true

Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true
自动类型转换

遇到以下几种情况,JavaScript会自动转化数据类型,用户是不可见的

  1. 自动转换为布尔值

var a = '123' if (a) {}

javascript在遇到预期为布尔值的地方(比如if条件语句),就会将非布尔值转化为boolean类型,系统内部自动调用Boolean函数

  1. 自动转换为数值

算数运算符(+-*/)跟非Number类型的值进行运算时,会把这些值自动的转换为数字类型再做计算,但是除了字符串的加法运算(对于加法运算只要包括字符串,就会把把另一个值也转为字符串进行拼接)

'123' + 345 // 123345
true + 1 // 2
[] + 1 // 1
1 * '6' // 6
  1. 自动转换为字符串

字符串的自动转换,主要发生在做加法运算时,把非字符串类型会转换为字符串类型再做加法, 主要有两种

加法运算符两个中如果存在至少一个字符串类型,则会自动转化为字符串相加 加法运算符中如果存在一个引用类型的值,则会把引用类型转化为字符串相加

true + '1' // "true1"
[] + '3' // "3"
'5' + function(){} // "5function(){}"
{} + 2 // "[object Object]2"
转换示例
Number('123') // 123
Number('123abc') // NaN
Number({}) // NaN
Number([]) // 0
Number([1,2]) // NaN
Number([1]) // 1
Number(function(){}) // NaN
String(123) // '123' // 调用数字包装对象类型上的toString()
String(true) // 'true' // 调用布尔包装对象类型上的toString()
String({}) // '[object Object]' // 调用对象原型上的toString()方法
String([]) // '' // 调用数组原型上的toString()方法
String(function(){}) // 'function(){}' 调用函数原型上的toString()方法
Boolean('') // false
Boolean(undefined) // false
Boolean(null) // false
Boolean(NaN) // false
Boolean(0) // false
1+[] // '1'
1+{} // '1[object Object]'
1 + [2] // '12'
1 + function(){} // '1function(){}'
1 + true // 2
2 - [2] // 0
2 -{} // NaN