JavaScript类型和类型转换

88 阅读2分钟

作者:Sean

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天

前言:精通 JavaScript 数据类型以及数据类型的各种转换

前端必会面试题

JavaScript 数据类型

  • 基本类型
    • 字符串
    • 数字
    • 布尔值
    • null
    • undefined
    • symbol
    • bigInt
  • Object
  • Array
  • Date
  • Regx

类型判断

typeof

  • 可以判断除 null 以外的所有基础类型
  • typeof null 值为 object
  • 除了函数 typeof 引用类型值为 object
  • typeof 函数值为 function

instanceof

可以判断所有引用类型

  • 无法解决 null 的判断问题

Object.prototype.toString.call()

可以判断所有数据类型,值为'[object 具体类型]'

隐式转换

  • 转换成布尔值
    • number 除了 0,-0,NaN 都为 true
    • string 除了空串都为 true
    • undefined, null 为 false
    • 引用类型 true
  • 转换成数字
    • 字符串 'number' => number 其他情况 NaN
    • 数组 [] => 0[1] => 1[1, 2] => NaN
    • null 0
    • 除了数组的引用类型 NaN
    • Symbol 抛错
  • 转换成字符串
    • number 'number'
    • 布尔,函数,symbol 'true'
    • 数组 [1, 2] => '1, 2'
    • 对象 '[object Object]'

四则运算

  • 有字符串其他也转换成字符串
  • 如果一方不是字符串或者数字,那么会将它转换为数字或者字符串
  • +'a' = NaN
  • 除了加法运算,其他运算只要有一方是数字,其他都会被转成数字

==比较

  1. 首先会判断是否为同类型
  2. 判断是否在对比nullundefined,是则返回true
  3. 判断两者是否为字符串和数字,是的话将字符串转换为number
  4. 判断一方是否为布尔值,是则将布尔值转换为number
  5. 判断一方是否为 object,另一方是否为 stringnumber 或者 symbol,是则将 object 转换成原始类型
  • 对象通过toPrimitive转换对象
  • 字符串通过unicode字符串索引