又来总结了

114 阅读2分钟

js

数据类型

数据类型及存储

  • 1、7种基本数据类型:Undefined、Null、Boolean、Number、String、Symbol(es6新增,表示独一无二的值)和BigInt(es10新增);
  • 2、1种引用数据类型——Object(Object本质上是由一组无序的名值对组成的)。
  • 存储
    • 原始数据类型:直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
    • 引用数据类型:同时存储在栈(stack)和堆(heap)中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

数据类型转换

  • 转Boolean(!!和Boolean())

undefined, null, false, NaN, '', ±0 转为 false, 其余都为true。

  • 引用类型-》原始类型

    • 先调用toPrimitive
      [symbol.toPrimitive](hint){
      	hint表示当前运算模式:
          	'number':该场合需要转换为数值
              'string':该场合需要转换为字符串
              'default':该场合数值字符串都可以
      }
      
    • 若没有toPrimitive方法,则先调用valueOf(),再调用toString().(日期对象一般调用toString(),若要求转换为数字,则调用valueof())
  • 当遇到强制类型转换

    • 转字符串
    • String() / toString():直接调用对象的toString()
    • 转数字
    • Number():直接调用对象的vauleOf()
    • parseInt() / parseFloat():调用对象的toString(),再将结果转化为数值

数据类型判断

  • typeof
    • typeof null === object
    • 除了null,原始类型都可以正确显示
    • typeof function(){} === function
    • 除了function,对象类型结果都为obejct
  • A instanceof B
    • 判断A对象的原型链上有没有B函数的显示原型对象
  • constructor
    • 原始类型和引用类型都可以判断
    • 如果一个对象,更改了它的原型,constructor就会变得不可靠了
  • Object.prototype.toString.call()
    • 返回格式:[object 类型名]
    • 原始类型,引用类型都可以

null和undefined

  • 相同点
    • 在 if 语句中 null 和 undefined 都会转为false
    • 两者用相等运算符比较也是相等
  • 不同点
    • null表示没有对象,即该处不应该有值
      • 作为函数的参数,表示该函数的参数不是对象
        • 作为对象原型链的终点
    • undefined表示缺少值,即此处应该有值,但没有定义
      • 定义了形参,没有传实参,显示undefined
      • 对象属性名不存在时,显示undefined
      • 函数没有写返回值,即没有写return,拿到的是undefined
      • 写了return,但没有赋值,拿到的是undefined
    • null和undefined转换成number数据类型
      • null 默认转成 0
      • undefined 默认转成 NaN