详细描述javascript数据类型

233 阅读3分钟

大体分类

  • 基本数据类型
    • number
    • boolean
    • undefined
    • string
    • null
    • symbol(es6)
    • bigint
  • 引用数据类型
    • object
      • 普通对象
      • Math
      • Date
      • Array
      • ....
    • function

数据类型检测

  • typeof 检测数据类型
  • instanceof 检测引用数据类型的原型链中是否有某一构造函数
  • constructor 每个原型中都会有constructor属性指向它的构造函数
  • Object.prototype.toStrong.call()

typeof

typeof只能检测数据类型,也就是number,string,boolean,undefined,null,symbol,bigint,object,function

alert(typeof 1)             //"number"
alert(typeof "2")             //"string"
alert(typeof undefined)             //"undefined"
alert(typeof true)             //"boolean"
alert(typeof Symbol("i"))             //"symbol"
alert(typeof BigInt('34'))              //"bigint"
alert(typeof {})              //"object"
alert(typeof Object.assign)              //"function"

//比较特殊的
alert(typeof null)              //"object")

typeof总结

typeof XXX 的结果是字符串 typeof只能检测数据类型不能检测对象具体所属的类 并且null的typeof职位"object"

其他数据类型转换为数字类型

强转换

一般不是用parseInt和parseFloat方法进行转化的都可认为是强类型转换 底层原理,使用Numer()

不同数据类型通过Number转化后的结果
  • 字符串类型 数字字符串 :Number("123")-> 123 Number("")->0 字符串中不都是有效数字: Number("12px")-> NaN
  • boolean类型 true: Number(true)-> 1 false: Number(false)-> 0
  • undefined Number(undefined)-> NaN
  • null Number(null)-> 0
isNaN

NaN(not a number)是number类型的,但是NaN==NaN永远不成立,因为NaN不跟任何值相等,想判断是否是NaN就用isNaN()这个方法,这个方法底层调用Number()把传入的数据转化成数字类型判断结果为true/false

+号运算

当进行运算时如果+碰到字符串/对象就要进行字符串拼接(字符串直接拼,对象调用toString()方法),如果是其他数据类型就调用Number()转化成数字运算

这里的对象实际上是先调用同String()转化成字符串再Number('那个自符串')转化成数字类型的,但是在转成字符串之后被+拦截 拼接字符串去了

==等号两边值得隐式转换

一般都要把==号两边转换为统一数据类型再进行比较

  • 对象==字符串 对象调用toString()转化成字符串后比较 -null==undefined 只有她两相等(===时不相等),null与undefined与任何值都不等, 例如: 0==null 结果为false,不会把null转换成数字
  • NaN NaN与任何值比较都是false
  • 其他类型==比较 把两边的数据都Number()转化成数字类型再比较
[]==false   //0==0  =>true
![]==false  //false==false =>true
//这里的比较涉及到运算的优先级取反优先于==,所以要先算![]

弱转换

parseInt() 和 parseFloat(),利用这两个方法对数据进行弱转换 传入数据首先要被转化成字符串,然后从左往右解析字符串,遇到不是有效数字就停止解析

其他值转换成boolean值

除了 0/NaN/null/undefined/"" 转化为boolean值为false,其他为true !!代表把其他值转化为boolean值 !![] =>true !!{} =>trued