这种由编译器自动转换的方式就称为隐式类型转换。
二、隐式类型转换的方式
- 将值转为布尔值,Boolean()
- 将值转为数字,Number()
- 将值转为字符串,toString()
三、部分常见值的转化结果
1. 通过Boolean()转化
- 会转化为false的值:undefined, null, -0, 0, NaN, “”
- 会转化为true的值:其他所有
2. 通过Number()转化
- 会转化为NaN的值:undefined,带字母或符号的字符串,所有引用类型(数组,对象,function,date等),NaN
- 会转化为0的值:null,“”,+0,false
- 布尔值转化为数值:false–>0 ,true–>1
四、隐式类型转换的各种情况
1. if中的条件会被自动转为Boolean类型
2. -减号
,*
,\
,%
,isNaN()
,-负号,+正号
隐式调用Number()转化为数值类型
// 部分示例
-"4" // -4
+"7" // 7
9-"4" // 5
3. 逻辑运算符(! , && , ||)
- ! 隐式调用Boolean()转化为布尔值
- &&
会将第一个操作数转化为Boolean类型
若转化后第一个操作数为true,则返回第二个操作值;否则返回第一个操作数的原始值
// 部分示例
1 && "key" //key
"key" && "" // ""
null && "key" // null
undefined && 0 // undefined
||
若第一个操作值经转化后为false则返回第二个值,否则返回第一个的原始值
1 || "key" //1
"key" || "" // "key"
null || "key" // "key"
undefined || 0 // 0
4. +
加法运算符
- 操作值中有字符串,将其他类型的操作值通过toString()转化为字符串再拼接
- 其他情况都转化为数值类型
一些不常见情况
- NaN + 任意值 = NaN
- Infinity + Infinity = Infinity
- -Infinity + (-Infinity) = -Infinity
- Infinity + (-Infinity) = NaN
- +0 + (+0) = +0
- -0 + (-0) = -0
- +0 + (-0) = +0
- 3 + true = 4,将true转化为1
- 4 + false = 4,将false转化为0
- true + false = 1,将true转化为1,将false转化为0
5. 比较运算符(== , < , >)
类型转化规则:
当1层的对象类型与2层字符串进行比较,会将对象类型隐式转化为字符串类型,进行比较;
当2层的字符串类型或布尔类型与数值类型进行比较,会将2层的类型隐式转化为数值类型,进行比较;
当1层的对象类型与3层的数值类型进行比较,会先将对象类型转化为字符串类型再转化为数值类型;
当2层的类型相互比较,会均转化为数值类型再进行比较;
最后
小编综合了阿里的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析
虽只说了一个公司的面试,但我们可以知道大厂关注的东西并举一反三,通过一个知识点延伸到另一个知识点,这是我们要掌握的学习方法,小伙伴们在这篇有学到的请评论点赞转发告诉小编哦,谢谢大家的支持!