值类型和引用类型

值类型

  1. image.png
  2. image.png
  3. 常见的值类型:undefined、string、number、boolean、Symbol

    引用类型

  4. image.png

  5. image.png
  6. 栈向下生长,堆向上生长。
  7. 常见的引用类型:对象、数组、null(特殊引用类型,指针指向空地址)、函数(特殊引用类型,但不用于存储数据,所有没有“拷贝、复制函数”)

    手写JS深拷贝

    typeof运算符

  8. 识别所有的值类型:undefined、string、number、boolean、Symbol

  9. 识别函数:function
  10. 判断是否是引用类型(不可再细分):object

    深拷贝代码

    1. /**
    2. *
    3. * @param {Object} obj 要拷贝的对象
    4. * @returns
    5. */
    6. function deepClone (obj = {}) {
    7. if (typeof obj !== 'object' || obj == null) {
    8. // 如果不是对象或者数组,直接返回值
    9. return obj
    10. }
    11. // 初始化返回结果
    12. let result
    13. if (obj instanceof Array) {
    14. result = []
    15. } else {
    16. result = {}
    17. }
    18. // 遍历obj key是键名
    19. for (let key in obj) {
    20. // 保证key不是原型的属性
    21. if (obj.hasOwnProperty(key)) {
    22. // 递归调用 遇到对象或者数组会再深入一层
    23. result[key] = deepClone(obj[key])
    24. }
    25. }
    26. // 返回结果
    27. return result
    28. }

    类型转换

    字符串拼接

  11. image.png

    ==运算符

  12. image.png

  13. 规定:除了 ==null 以外,其他都一律使用 ===

    if语句和逻辑运算

  14. truly变量:!!a===true的变量

  15. falsely变量:!!a===false的变量
  16. image.png
  17. if语句和逻辑判断中判断的不是true和false,判断的是truly变量和falsely变量

    相关面试题

  18. typeof能判断哪些类型?

    1. 识别所有的值类型:undefined、string、number、boolean、Symbol
    2. 识别函数:function
    3. 判断是否是引用类型(不可再细分):object
  19. 何时使用 === 何时使用 ==
    1. 除了 ==null 以外,其他都一律使用 ===
  20. 值类型和引用类型的区别
    1. image.png
  21. 手写深拷贝
    1. 注意判断值类型和引用类型
    2. 注意判断是数组还是对象
    3. 递归调用