共计 707 个字符,预计需要花费 2 分钟才能阅读完成。
基本类型和引用类型
基本类型
按值访问,可以操作保存在变量中实际的值
基本类型存在栈内存
当基本类型调用对象的方法时,不会起效,底层会有一个叫包装对象酷炫操作,效果是 … 不报错
引用类型
复制:操作的是对象的引用
添加属性:操作的是实际的对象
引用类型数据存在堆内存,而引用存在栈区,也就是说引用类型同时保存在栈区和堆区
引用类型的比较是比较引用
== 的类型转换关于 == 的执行机制,ECMASript 有规范,因为 == 前后的值交换顺序,返回的值也是一样的,所以在此对规范做出如下总结
两者类型相等的话,返回 === 的结果,=== 不存在类型转换
—— 所以一下都是不相等的情况 ——–
null 和 undefined 相等 反过来也一样
一个是 String,另一个是 number,把 string 转化为 number 然后在做 ==
只要有一个类型是 boolean,把 boolean 转化为 number 然后在做 ==
一个是 number 或者 string,另外一个是对象,把对象转化为原始类型 然后在做 ==
两者都是引用类型,看是不是同一个引用
如果以上情况都不是,返回 false 引用转原始类型
优先调用 valueOf 方法(如果有),有原始值返回,结束
否则,调用 toString 方法(如果有)
其他报错。
总之,类型不相等的情况下,引用类型一顿转换变成原始类型,原始类型一顿转换变成 number 类型例 1[] == false 类型不相等,往下走发现有一个是 boolean -> [] == 0 发现一个是对象 -> ” == 0 一个是 string,一个是 number -> 0 == 0 返回 true 例 2false == undefined 第 4 条 0 == undefined 然后哪条都不是,只好返回 false