一文搞懂js隐私转换

90 阅读2分钟

纯干货,很基础,但面试中确实也经常问到,总结下来

讲这个之前,先说一下js的数据类型

基本数据类型:boolean,null, undefined, string,number, symbol ,正则

引用数据类型:array, object, function

会有面试官问起 正则属于什么类型

是基本数据类型


下面我们来进入正题

隐式转换

分多种场合和情况 分别是 减乘除, 加法的特殊性, 逻辑条件中的类型转化

  • 减,乘,除

    我们在对各种非Number类型运用数学运算符(- * /)时

    会先将非Number类型转换为Number类型

image.png

  • 加法的特殊性 (JS里 +可以用来拼接字符串。谨记以下3条:)
  1. 当一侧是 String类型,被识别为字符串拼接,并会优先将另一侧转换为字符串类型
  2. 当一侧是Number类型,另一侧为原始类型,则将原始类型转换为Number类型
  3. 当一侧是Number类型,另一侧是引用类型,将引用类型和Number类型转换成字符串后拼接。

以上3点 按照 优先级排序, 越来越低  ,最前面的优先级越高

image.png

  • 逻辑条件中的类型转换

    当我们使用 if while for 语句时,我们期望表达式是一个Boolean,所以一定伴随着隐式类型转换。而这里面又分为两种情况:

    • 单个变量
      • 单个变量,会先将变量转换为Boolean类型
      • 转为boolean的值有一个小技巧,记住 null undefined '' NaN 0 false  这几个是false, 其余都是true
    • 使用 == 中5条规则   ( 这里是双等 不是三等
      • NaN和其他任何类型比较永远返回false(包括和他自己)
      • Boolean 和其任何类型比较,boolean首先会转换为number类型
      • String 和 number类型比较,先将string转换为number 类型
      • null 和 undefined 比较 是 true ,除此之外, null,undefined 和其他任何值比较都是false
      • 原始类型 和 引用类型做比较时,引用类型会依照 toPrimitive规则 转换为原始类型
        • 它遵循 先 valueOf , 后toString的模式 期望得到一个原始类型

        • 如果还是没法得到原始值 就会抛出 typeError

经典例题:

image.png

字数很少,但很通透

希望能够帮到你