值类型与引用类型有什么区别?

118 阅读1分钟

值类型与引用类型有什么区别?

哪些类型是值类型?哪些类型是引用类型

值类型:String、Number、BOOlean、Symbol 引用类型:JSON、Array、null

    let a = 10;
    let b = a   直接给两个值互相没有关系
    
    let obj = {name:'miaomioa'}
    let obj2 = obj    改变obj1就会影像obj2,改变obj2就会影像obj;互相影像

手写深拷贝(克隆)

如何实现深拷贝

  1. JSON.parse(JSON.stringfy(obj)) 不能存放函数,时间对象正则...
  2. 递归lodash.cloneDeep推荐工作中没必要重复造轮子

深度克隆

    function deepClone(obj) {
      if (typeof obj !== "object" || obj == null) {
        return obj;
      } 
      let res = obj instanceof Array ? [] : {};  
      for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
          res[key] = deepClone(obj[key]);
        }
      } 
      return res;
    }

如何使用==和===

==不判断数据类型 ===判断数据类型

只有 obj == null 使用双等

    obj == null是下列代码的缩写
    if (obj === null || obj === undefined) {}  

哪些是truly变量?哪些是falsely变量?

哪些是truly标量

  1. truly变量 !!val === true
  2. falsey变量 !!vla === false

除了fasely变量,都是truly变量

  1. 数字0
  2. NaN
  3. 空字符串
  4. null
  5. undefined

原型和原型链是怎么回事

原型

每个class都有显示原型prototype每个实例都有隐身原型__proto__实例的__proto__指向对应class的prototype

原型的执行规则

先从自身的属性和方法中查找 如歌找不到,去__proto__中找

原型链

原型链,所有的原型构成了一个链条,这个链条就是原型链

this在不同场景,如何去获取

普通函数this指向

非严格window 严格undefined

call apply bind的this

喜欢的老铁点赞收藏呦