JS数据类型、类型判断、类型转换

所有内容均不是原创,单纯之前学习时做的笔记。内容结合了非常多的文章视频,已经记不清参考的哪里的了,所以就没有加参考说明了。

数据类型

  • 有7种基本数据类型,也称为原始类型
    1. number 用于任何类型的数字:整数或浮点数,在±(253 - 1) 范围内的整数。
    2. bigint 用于任意长度的整数,如:2n。
    3. string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。
    4. boolean 用于 truefalse
    5. null 用于未知的值 —— 只有一个 null 值的独立类型。
    6. undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。
    7. symbol 用于唯一的标识符。
  • 复杂数据类型:object 用于更复杂的数据结构。

类型判断

  1. typeof:原始数据类型中除了 null,其它类型都可以通过 typeof 来判断,因为typeof null 会返回"object" 。对于对象类型来说,typeof 只能具体判断函数的类型为 function,其它均为 object。对 typeof x 的调用会以字符串的形式返回数据类型。
  2. instanceofinstanceof 内部通过原型链的方式来判断是否为构建函数的实例,常用于判断具体的对象类型。
  3. Object.prototype.toStringObject.prototype.toString 综合来看是最佳选择,能判断的类型最完整。
  4. isArray、isNaN
  5. typeof true // 'boolean'var str1 = new String('hello world')
    str1 instanceof String // truevar toString = Object.prototype.toString;
    toString.call(new Date); // [object Date]
    toString.call(new String); // [object String]
    

类型转换

  1. 转布尔值规则:

    • undefined、null、false、NaN、''、0、-0 都转为 false
    • 其他所有值都转为 true,包括所有对象。
  2. 转数字规则:

    • true 为 1,false 为 0
    • null 为 0,undefinedNaNsymbol 报错
    • 字符串看内容,如果是数字或者进制值就正常转,否则就 NaN
  3. 对象转基本类型:

    • 调用 Symbol.toPrimitive,转成功就结束
    • 调用 valueOf,转成功就结束
    • 调用 toString,转成功就结束
    • 报错
  4. 四则运算符:

    • 只有当加法运算时,其中一方是字符串类型,就会把另一个也转为字符串类型
    • 其他运算只要其中一方是数字,那么另一方就转为数字
  5. 比较运算符

    • 相等和不相等——先转换再比较 (==

      1. 首先会判断两者类型是否相同。相同的话就是比大小了

      2. 类型不相同的话,那么就会进行类型转换

      3. 会先判断是否在对比 nullundefined,是的话就会返回 true

      4. null 不等于任何值除了 nullundefinedundefined同理

      5. 判断两者类型是否为stringnumber,是的话就会将字符串转换为number

        1 == '1'
              ↓
        1 ==  1
        
      6. 判断其中一方是否为boolean,是的话就会把boolean转为number再进行判断

        '1' == true
                ↓
        '1' ==  1
                ↓
         1  ==  1
        
      7. 判断其中一方是否为object且另一方为string、number或者symbol,是的话就会把object转为原始类型再进行判断

        '1' == { name: 'yck' }
                ↓
        '1' == '[object Object]'
        
    • !可将变量转换成boolean类型
    • + 'b' 等于 NaN,这里的+是一元正号
  1. 总结
    • 比较运算符始终返回布尔值。

    • 字符串的比较,会按照“词典”顺序逐字符地比较大小。

    • 当对不同类型的值进行比较时,它们会先被转化为数字(不包括严格相等检查)再进行比较。

    • 在非严格相等 == 下,nullundefined 相等且各自不等于任何其他的值。

    • 在使用 >< 进行比较时,需要注意变量可能为 null/undefined 的情况。比较好的方法是单独检查变量是否等于 null/undefined