# 变量类型和计算

# 变量类型

  • 值类型和引用类型
  • typeof 运算符
  • 深拷贝

# 变量计算 - 类型转换

  • 字符串拼接
  • == 运算符
100 = '100' // true
0 == '' // true
0 == false // true
false == '' // true
null == undefined // true
  • if 语句和逻辑运算

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

falsely变量:!!a === false 的变量

// 以下是 falsely 变量。除此之外都是 truth变量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false

# 常见考点

  • typeof 能判断哪些类型

    • 识别所有值类型
    • 识别函数
    • 判断是否是引用类型(不可细分)
  • 何时使用 === ,何时使用 ==

    • 除了 == null 之外,其他都一律用 ===
  • 值类型和引用类型的区别

    • 值类型 - 栈内存
    • 引用类型 - 堆内存
  • 手写深拷贝

    • 注意判断值类型和引用类型
    • 注意判断是数组还是对象
    • 递归
    function deepCLone(obj = {}) {
        if (typeof obj !== 'object' || obj == null) {
            return obj
        }
        // let newObj = obj instanceof Array ? [] : {}
        let newObj = Array.isArray(obj) ? [] : {}
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                // 保证key 不是原型的属性
                newObj[key] = deepClone(obj[key])
            }
        }
        return newObj
    }