值类型和引用类型的区别

值类型和引用类型深入分析

  1. 值类型的值直接存储在栈中,各不相关。
  2. 引用类型的值存储的是一个内存地址,这个内存地址指向于那个对象(堆中)这两种存储类型的原因?根据内存空间和cpu耗时考虑规划出的解决方法。
  3. 为了性能,一个json可能会很大,如果像值类型—样直接存储复制值占内存耗时。

image.png

常见的值类型

image.png
undefined、String、Number、Boolean、Symbol

常见的引用类型

image.png
对象、数组、null(指向空地址)、函数

手写JS深拷贝

typeof运算符

  1. 识别所有的值类型

image.png

  1. 识别函数

image.png

  1. 识别是否是引用类型(不可再细分)

image.png

深拷贝

  1. const obj1={
  2. age:20,
  3. name:"xxx",
  4. address:{
  5. city:'beijing'
  6. },
  7. arr:['a','b','c']
  8. }
  9. const obj2=deepClone(obj1)
  1. function deepClone(obj){
  2. if(typeof obj !=='object' || obj==null){
  3. return obj
  4. }
  5. let result
  6. if(obj instanceof Array){
  7. result = []
  8. }else {
  9. result = {}
  10. }
  11. for(let key in obj){
  12. if(obj.hasOwnProperty(key)){
  13. result[key] = deepClone (obj[key])
  14. }
  15. }
  16. return result
  17. }

变量计算-注意某些类型转换的坑

字符串拼接

image.png

==

image.png
==会发生类型转换,让等式成立。会产生一些问题
100和’100’转换字符串后相等
0和’ ‘转换成false
基于这样的原因,我们只有一个地方用==,其余用===
image.png

if语句和逻辑运算

image.png
举例
image.pngimage.png
image.png
image.png
即if的条件不只是布尔值,truely变量和falsely变量也可
image.png

面试题

typeof能判断哪些类型

image.png

何时使用===何时使用==

image.png

值类型和引用类型的区别

手写深拷贝image.png

image.png

小结

image.png