昨天面试遇到一道javascript的隐式类型转换题,这么基础的题居然都没有一下子确定答案,基础不行呐,于是回来立马上网查找资料学习,现在特记录下,有错误的话请务必留言,共同学习!
大范围看的话,javascript可分为显示类型转换和隐式类型转换,而隐式转换又有运算符和条件运算符两种情况
1.显示转换
主要是这几个函数Number(),parseInt(),String(),toString(),parseFloat(),Boolean()
一.Number与parseInt的主要区别:
1 Number遇到不规范的数字字符串时转为NaN
Number("020hello")=>NaN
parseInt("020hello")=>20 ; //parseInt与parseFloat一样,但字符串第一个字符为数字,则会一直检索直到遇到非数字parseInt("99.99.9")=>99
2
Number 会把"",false,true,null转为相应的0,0,1,0,而{},undefined转为NaN
Number("")=>0, parseInt("")=>NaN
Number(false)=>0, parseInt(false)=>NaN
Number(true)=>1, parseInt(true)=>NaN
Number(null)=>0, parseInt(null)=>NaN
Number({)}=>NaN parseInt({})=>NaN
Number(undefined)=>NaN parseInt(undefined)=>NaN
parseInt则会把"",false,true,null,{},undefined转为NaN
3.Number(对象),会先调用对象的valueOf(),如果没有再调用toString()方法,有返回值时按以上方式转换
parseInt(对象),一律为NaN;
Number({valueOf:function{return 1;}})=>1
parseInt({valueOf:function{return 1;}})=>NaN
4.String与toString(),用法不一样,变量.toString(),故null,undefined没有toString()方法,使用会报错
2.隐式转换
1。运算符-/*% 都是使用Number规则进行转换,+(遇字符串时特殊)
2.+运算符,从左往右运算,但同时也为字符串连接符,所以但数字与字符串相加时,会转数字为字符串
1+2+"3"=>"33"
3。isNaN只是用来检测是否是非数字,is not a number 会自动使用Number转换
isNaN(null)=>false //Number(null)为0,0是数字,而不是not a number 故为false
注意NaN===NaN=>false 我个人记忆为不为数字的类型有很多,不一定相等
所以要检验NaN,使用NaN!==NaN 为true时变量为NaN
检验undefined,使用var a; typeof a===undefined =>true
4.条件表达式
Number>Boolean>String>Object 当两两相遇时优先级低的转为高的类型再比较