一.自动类型转换
1.二元运算符运算两个不同类型的值(运算元)时会先进行类型转换为Number,再进行数学运算。
'4' - '3' // 1
'4' * 1 // 4
'4' / 1 // 4
'4' % 2 // 0
'4' ** 2 // 16
'4' - true // 3
'4' - false // 4
'4' - [] // 4
true + 1 // 2
false + 1 // 1
undefinde - 1 // NaN
null + 1 // 1
1 + [] // 1
分析: 上面的例子中,不管值什么类型的值,都会先转换在运算,'4' 字符串被转换Number类型的 4 ,true 被转换为 Number类型的 1 , false转换为Number类型的 0 , null 被转为Number 类型的 0 ,undefined 被转为 NaN (not a number), [] 空数组转为 Number类型的 0 。上的转换过程就是Number() 一样。
注: Number([]) 这时空数组会被转为 0,Number(['4']) 当数组中存在一个值可以视作Number(4) ,Number([3,'4']) 这是将会被转为 NaN(not a number)。
注: 一个字符串 通过 + 与另一种任何类型的值做运算时,会将其转换为String类型
'4' + undefined // '4undefined'
'4' + {} // '4[object Object]'
'4' + [1,4,5] // '41,4,5'
2.一元运算符 + - 进行Number 类型转换
通过 +, - 连接一个非Number 类型值时将被转换为Number 类型,这相当Numer()类型转换。
+ 一元运算符
+ '4' // 4
+ true // 1
+ false // 0
+ null // 0
+ undefined // NaN
+ [] // 0
+ [1] // 1
+ [3,5] // NaN
+ {} // NaN
- 一元运算符
- '4' // -4
- true // -1
- false // -0
- null // -0
- undefined // NaN
- [] // -0
- [1] // -1
- [3,5] // NaN
- {} // NaN
3一元运算符 + 连接两个不同类型的值,当其中一个是String 类型,那么另个一将会类型转换为String类型。
String类型 + String类型
"Hel" + "lo" // Hello
String类型 + Number类型
"5" + 4 // "54"
String类型 + Boolean类型
"5" + true // "5true"
"5" + false // "5false"
String类型 + Object
"5" + {} // "5[object Object]"
String类型 + Array
"5" + [1,4,5] // "51,4,5"
String 类型 + null
"5" + null // "5null"
String类型 + undefined
"5" + undefined // "5undefined"
二.强行转换类型
强行转换是通过Numer(),String(),Boolean(),函数来转换到指定的类型。
1.Number() 函数转换为 Number 类型
String类型转换为Number类型
Number('3') // 3
Number('Hello') // NaN
注: Number()无法将String类型的非数字字符串转为Number类型,那将返回NaN
Boolean 类型转换为 Number 类型
Number(true) // 1
Number(false) // 0
null 转换为Number类型
Number(null) // 0
undefined 转换为Number类型
Number(undefined) // NaN
Object 转换为 Number类型
Number({}) // NaN
注:Object 对象无法转换成Number类型,那将返回Number的特殊值NaN(not a number)
2.String()函数转换为String类型
Number 类型转换为 String类型
String(5) // 5
Boolean 类型转换为 String类型
String('true') // 'true'
String('false') // 'false'
undefined 转换为 String类型
String(undefined) // 'undefined'
null 转换为 String类型
String(null) // 'null'
Object 转换为 String 类型
String({}) // "[object Object]"
Array转换为String类型
String([]) // ""
String([1,3,5]) // "1,3,5"
注: String 转换 空数组时返回"" ,在转换有值的数组时会将数组中的每一值转为字符串通逗号来分隔开并连接成一个长的字符串。
Function 函数转为String类型
function fun(){
return 10;
}
String(fun) // "function fun(){return 10;}"
注: String()将定义函数体转为字符串输出
3.Boolean() 函数转换为Boolean类型
Number 类型转换为Boolean类型
Boolean(0) // false
Boolean(1) // true
Boolean(2) // true
Boolean(-1) // true
Boolean(-2) // true
注: 当Number类型的值得绝对值不等于0 那将会被转换为true,当等于0是将被转换为false
String类型转换为Boolean 类型
Boolean("") // false
Boolean("4") // true
Boolean(" ") // true
注: 只要字符串为空,那将转换为true,反之字符串为空时,将会被转换为false ,在字符串中空格也是一个字符,所有" " 也是会被转为true。
null 转换为Boolean 类型
Boolean(null) // false
undefined 转换为Boolean 类型
Boolean(undefined) // false
Object 转换为Boolean类型
Boolean({}) // true
Boolean({name: "Jason"}) // true
注: 所有的对象都会转换为true,甚至空对象也是转换为true
Array 转换为Boolean类型
Boolean([]) // true
Boolean([1,4,5]) // true
注: Array 和Objcet一样,所有的数组都会转为true,甚至空数组也是转换为true
Function 转换为 Boolean 类型
function fun(){
return 10;
}
Boolean(fun) // true
注: function 函数隶属Object 对象,所有function 转换为true