JS的类型复盘

基本类型和引用类型对象

基本类型ip

  1. 按值访问,能够操做保存在变量中实际的值
  2. 基本类型存在栈内存
  3. 当基本类型调用对象的方法时,不会起效,底层会有一个叫包装对象酷炫操做,效果是...不报错

引用类型内存

  1. 复制:操做的是对象的引用
  2. 添加属性:操做的是实际的对象
  3. 引用类型数据存在堆内存,而引用存在栈区,也就是说引用类型同时保存在栈区和堆区
  4. 引用类型的比较是比较引用

==的类型转换
关于==的执行机制,ECMASript有规范,由于==先后的值交换顺序,返回的值也是同样的,因此在此对规范作出以下总结string

  1. 二者类型相等的话,返回 ===的结果,===不存在类型转换

------因此一下都是不相等的状况--------变量

  1. null 和 undefined 相等 反过来也同样
  2. 一个是String,另外一个是number,把string转化为number 而后在作 ==
  3. 只要有一个类型是boolean,把boolean转化为number 而后在作 ==
  4. 一个是number或者string,另一个是对象,把对象转化为原始类型 而后在作 ==
  5. 二者都是引用类型,看是否是同一个引用

若是以上状况都不是,返回false
引用转原始类型引用

  1. 优先调用valueOf方法(若是有),有原始值返回,结束
  2. 不然,调用toString方法(若是有)
  3. 其余报错。

总之,类型不相等的状况下,引用类型一顿转换变成原始类型,原始类型一顿转换变成number类型
例1
[] == false
类型不相等,往下走
发现有一个是boolean -> [] == 0
发现一个是对象 -> '' == 0
一个是string,一个是number -> 0 == 0
返回 true
例2
false == undefined
第4条 0 == undefined
而后哪条都不是,只好返回false方法