美文网首页
2018-12-21 javascript 浅比较和深比较

2018-12-21 javascript 浅比较和深比较

作者: KingAmo | 来源:发表于2018-12-21 14:12 被阅读0次

    浅比较

    浅比较也称引用相等,在javascript中, ===是作浅比较,只检查左右两边是否是同一个对象的引用

    {a:1} === {a:1} // false
    
    const m = {a:1};
    const n = {a:1};
    m === n //false
    
    const m = {a:1};
    const n = m;
    m === n //true
    
    const m = {a:1};
    m === {a:1} //false
    
    changeValue(params) {
      params.a = 2;
      return params;
    }
    const m = {a:1};
    const n = changeValue(m);
    m === n //true
    m //{a:2}
    n //{a:2}
    ps: 这里`changeValue`方法直接修改了传入的参数`params`,这么做造成的后果是把  `m`的值也改变了
    (因为javascript中,基本类型是传值调用,引用类型是传引用调用)
    所以这种做法在`webstrom`中也会有警告,尽量不要这么做;
    

    如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。

    这种引用只局限于对象,如果两个变量指向同一个原始类型的值。那么,变量这时都是值的拷贝。

    1 === 1 //true
    
    const m = 1;
    const n = 1;
    m === n //true
    
    const m = 1;
    const n = m;
    m === n //true
    
    changeValue(params) {
      params = params + 1;
      return params;
    }
    const m = 1;
    const n = changeValue(m);
    m === n //false
    m //1
    n //2
    

    深比较

    深比较也称原值相等,深比较是指检查两个对象所有属性是否都相等,深比较需要以递归的方式遍历两个对象的所有属性,操作比较耗时,深比较不管这两个对象是不是同一对象的引用。
    javascript没有提供深比较的api,需要自己实现,网上有很多,具体查一下吧

    deepEqual(a,b) {...} //假设这是深比较的具体实现 
    const m = {a:1};
    const n = {a:1};
    deepEqual(m,n) // true
    const x = {a:1, b: {c:1}};
    const y = {a:1, b: {c:1}};
    deepEqual(x,y) //true
    只要两个对象的所有属性都相等,深比较就返回true
    

    相关文章

      网友评论

          本文标题:2018-12-21 javascript 浅比较和深比较

          本文链接:https://www.haomeiwen.com/subject/tdmmkqtx.html