纯干货,很基础,但面试中确实也经常问到,总结下来
讲这个之前,先说一下js的数据类型
基本数据类型:boolean,null, undefined, string,number, symbol ,正则
引用数据类型:array, object, function
会有面试官问起 正则属于什么类型
是基本数据类型
下面我们来进入正题
隐式转换
分多种场合和情况 分别是 减乘除, 加法的特殊性, 逻辑条件中的类型转化
-
减,乘,除
我们在对各种非Number类型运用数学运算符(- * /)时
会先将非Number类型转换为Number类型
- 加法的特殊性 (JS里
+可以用来拼接字符串。谨记以下3条:)
- 当一侧是 String类型,被识别为字符串拼接,并会优先将另一侧转换为字符串类型
- 当一侧是Number类型,另一侧为原始类型,则将原始类型转换为Number类型
- 当一侧是Number类型,另一侧是引用类型,将引用类型和Number类型转换成字符串后拼接。
以上3点 按照 优先级排序, 越来越低 ,最前面的优先级越高
-
逻辑条件中的类型转换
当我们使用
ifwhilefor语句时,我们期望表达式是一个Boolean,所以一定伴随着隐式类型转换。而这里面又分为两种情况:- 单个变量
- 单个变量,会先将变量转换为Boolean类型
- 转为boolean的值有一个小技巧,记住
nullundefined''NaN0false这几个是false, 其余都是true
- 使用 == 中5条规则 ( 这里是双等 不是三等 )
- NaN和其他任何类型比较永远返回false(包括和他自己)
- Boolean 和其任何类型比较,boolean首先会转换为number类型
- String 和 number类型比较,先将string转换为number 类型
- null 和 undefined 比较 是 true ,除此之外, null,undefined 和其他任何值比较都是false
- 原始类型 和 引用类型做比较时,引用类型会依照 toPrimitive规则 转换为原始类型
-
它遵循 先 valueOf , 后toString的模式 期望得到一个原始类型
-
如果还是没法得到原始值 就会抛出 typeError
-
- 单个变量
经典例题:
字数很少,但很通透
希望能够帮到你