JavaScript中的JavaScript中的七种数据类型,而JavaScript是一种动态类型语言,在调用一个变量前我们无法固定变量的数据类型,在条件判断、数值计算的时候必然会出现变量的隐式转换的问题,这将使我们的代码出现各种隐藏的bug,理解清楚各个类型间的转换方式,会使我们写出来的代码更加健壮。
Numer
显式转换
JavaScript提供了以下两种方式将其他类型转化为Number
- Number工厂
1
2
3
4
5
6
7Number('0b10') // 2
Number('0o91') // NaN
Number(true) // 1
Number(null) // 0
Number({}) // NaN
Number(['0b10']) // 2
Number(Symbol()) // TypeError: Cannot convert a Symbol value to a number
Number工厂可以将除Symbol外的其他数据类型显式的转换为Number
- 合法的字符串会转换为字面值、否则会转换为NaN
true=>1
false=>0
undefined=>0
null=>0
- 普通对象或函数转换为NaN
- 多元素数组转换为NaN,单元素数组则等同于将元素转换为Number
- 转换函数
JavaScript提供parseInt与parseFloat函数可以将字符串有效位之前的数字转换为数字,如果没有有效位或者不是字符串将返回NaN
1 | parseInt("1234blue") // 1234 |
其中parseInt还支持指定进制1
2
3
4parseInt("AF", 16) // 175
parseInt("10", 2) // 2
parseInt("10", 8) // 8
parseInt("10", 10) // 10
隐式转换
1 | ~'10' // -11 |
在进行位运算时,除了Symbol以外所有的数据类型都会转换为整数类型
- 布尔值
true => 1
false => 0
- 字符串遵循数字表示法转换,当为浮点数时会转换为整数,当字符串不符合数字规范时则会转换为0
- undefined和null会转换为0
- 对象比较特殊,普通对象和函数对象都会转换为0,数组对象当在只有一个元素时会转换这个元素,而有多个元素时也会转换为0
1 | '10' - 0 // 10 |
JavaScript中还存在着减0和取正转换为Number的奇技淫巧,不过结果可能和我们想的不太一样。
在以隐式转换的情况下,很容易出现意想不到的情况发生,这将会带来极大的隐患,如果没有十足的把握不建议大家使用这种方法做类型转换。
Boolean
显式转换
我们可以通过Boolean工厂将其他数据类型显式的转换为Boolean值1
2
3
4
5
6
7
8// 只有这7种情况为false,其余情况全都为true
Boolean(undefined) // false
Boolean(null) // false
Boolean(false) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean("") // false
Boolean('') // false
隐式转换
Boolean隐式转换与显示转换的结果是相同的,当我们清晰的知道转换结果时,可以直接使用隐式转换。
当在JavaScript需要一个布尔值时,就会将其他值隐式的转换为布尔值
1
2
3
4
5
6if (1) {
console.log(1) // 1
}
while (1) {
console.log(1) // 1 死循环
}当进行取反运算时,会触发隐式转换
1
!0 // true
我们可以通过使用两个取反符号来简洁的转换为布尔值1
!!0 // false
String
String工厂
我们可以使用String工厂将其他数据类型转换为字符串1
2
3
4
5
6
7
8String(123) // '123'
String({}) // '[object Object]'
String([]) // ''
String([1,2,3]) // '1,2,3'
String(function(){return}) // 'function (){return}'
String(undefined) // 'undefined'
String(null) // 'undefined'
String(Symbol(1)) // 'Symbol(1)'
除了对象以外都可以使用此方式转换为我们期待的形式,如果需要将对象转换为字符串的形式,我们可以使用JSON.stringify转换为一个Json字符串1
JSON.stringify({a:1,b:2}) // '{"a":1,"b":2}'
toString方法
除null和undefined以外我们可以调用对象的toString方法来转换为字符串1
2
3
4(1).toString() // 1
({}).toString() // '[object Object]'
Symbol().toString() // 'Symbol()'
(function(){return}).toString() // 'function (){return}'
+运算符
简单的使用+运算符可以使我们方便的转换为字符串1
2
31 + '' // '1'
({}) + '' // [object Object]'
Symbol() + '' // 'Symbol()'
模板字符串
模板字符串中可以添加变量的特性,使我们也可以通过其转换字符串1
`${123}` // 123
Object
我们只有一种需求需要转换为Object,那就是将Json字符串转换为Object,只需要使用JSON.parse函数即可1
JSON.parse('{"a":1}') // { a: 1 }
其他
我们并不会有其他类型转换为null、undefined、Symbol的需求,所以也没有相关的转换方法。
本文链接:JavaScript中的类型转换
版权声明:本文章采用CC BY-NC-SA 3.0 CN许可协议进行许可。转载请注明出处!