js类型转化机制
1.js数据类型
js六种数据类型:string/undefined/null/number/object/symbol
常见的类型转换有:
强制转换(显示转换)
自动转换(隐式转换)
2.显示转化
//Number()parseInt()String()Boolean()
//Number()将任意类型的值转化为数值
console.log(Number('1'),Number(null),Number(undefined),Number(3),Number(NaN),Number("q"),Number(true),Number(false),Number({a:'1'})) //1,0,NaN,3,NaN,NaN,1,0,NaN
//parseInt函数逐个解析字符,遇到不能转换的字符就停下来
console.log(parseInt('123asr23'))//123
//String()可以将任意类型的值转化成字符串
console.log(String('123'),String(undefined),String(null),String(NaN),String(123),String({a:"1"}))// 123,undefined,null,NaN,123,[object Object]
//Boolean()可以将任意类型的值转为布尔值
console.log(Boolean(true),Boolean(false),Boolean("123"),Boolean({}),Boolean(undefined),Boolean(null),Boolean(''),Boolean([]),Boolean(NaN),Boolean(0))// true,false,true,true,false,false,false,true,false,false
3.隐式转换
//我们这里可以归纳为两种情况发生隐式转换的场景:
//比较运算(==、!=、>、<)、if、while需要布尔值地方
//算术运算(+、-、*、/、%)
在需要布尔值的地方,就会将非布尔值的参数自动转为布尔值,系统内部会调用Boolean函数
可以得出个小结:
undefined
null
false
+0
-0
NaN
""
//除了上面几种会被转化成false,其他都换被转化成true
//自动转换成字符串遇到预期为字符串的地方,就会将非字符串的值自动转为字符具体规则是:先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串常发生在+运算中,一旦存在字符串,则会进行字符串拼接操作
console.log('2'+ 1,'2'+{},'2'+[],'2'+undefined,'2'+null,'2'+function(){},'2'+true,'2'+false)//21,2[objectObject],2,2undefined,2null,2function(){},2true,2false
//除了+有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值
console.log('5' - '2' ,'5' * '2',true - 1 ,false - 1 ,'1' - 1,'5' * [] ,false / '5' ,'abc' - 1 ,null + 1 ,undefined + 1 )// 3,10,0,-1,0,0,0,NaN,1,NaN