js数据类型转换注意点
JavaScript是一种动态类型语言,变量没有类型限制,但是数据本身和各种运算符是有类型的。
如果运算符发现,数据的类型与预期不符,就会自动转换类型。
使用Number函数,可以将任意类型的值转化成数值。
如果参数值是字符串、布尔值、undefined和null,它们能被Number转成数值或NaN。
// 数值转换后还是原来的值
Number(100) //100
// 如果字符串可以被解析为数值,则转换为相应的数值
Number("100") //100
// 如果字符串不可以被解析为数值,返回NaN
Number("100Abc") // NaN
// 空字符串转为0
Number("") // 0
// 布尔值true 转成1,false 转成0
Number(true) // 1
Number(false) // 0
// undefined:转成 NaN
Number(undefined) // NaN
// null转成0
Number(null) // 0
Number函数将字符串转为数值,只要有一个字符无法转成数值,整个字符串就会被转为NaN。
parseInt('42 cats') // 42
Number('42 cats') // NaN
上面代码中,parseInt逐个解析字符,而Number函数整体转换字符串的类型。
使用String函数,可以将任意类型的值转化成字符串。转换规则如下。
使用Boolean函数,可以将任意类型的变量转为布尔值。undefined、null、0、NaN的转换结果为false,其他的值全部为true。所有对象的布尔值都是true。
不同类型的数据互相运算或者对非布尔值类型的数据求布尔值,JavaScript会自动转换数据类型。
当JavaScript遇到预期为数值的地方,系统内部会自动调用Number函数,将参数值自动转换为数值,除了加法运算符有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。
"5" - "3" //2
"5" * "3" //15
true - 1 // 0
false - 1 // -1
"1" - 1 // 0
"5"* [] // 0
false/"5" // 0
"abc"-1 // NaN
null+1 // 1
undefined+1 // NaN
上面代码中,运算符两侧的运算子,都被转成了数值。
由于自动转换具有不确定性,所以在数据预期为布尔值、数值、字符串的地方,应该使用Boolean、Number和String函数进行显式转换。