JavaScript原生实现【对象深度比较】和【URL参数解析】

前言

作为JavaScript小白,一些基本代码经常用到,每次都还需要网上再查,不如记录一下,这也是博客的目的之一啊!

干货

1. Object比较

JavaScript如何判断两个对象equal呢,而非==,换句话说如何判断两个对象的属性都相同?

下面的函数可以判断target对象于origin对象值相同

代码

// 判断两个object是否相同  
function objCompare(origin, target) {  
  if (typeof target !== "object") {  
    return origin === target;  
  }  
  if (typeof origin !== "object") {  
    return false;  
  }  
  // 校验keys数组长度是否相等  
  if (Object.keys(target).length !== Object.keys(origin).length){  
    return false;  
  }  
  for (let key of Object.keys(target)) {  
    //遍历target的所有自身属性的key  
    if (!objCompare(origin[key], target[key])) {  
      //递归比较key对应的value  
      return false;  
    }  
  }  
  //遍历结束,所有value都深度比较相等,则两对象相等  
  return true;  
}  

说明

已经测试情况:

  1. 非对象比较为false,正常

  2. 长度不相同为false(包含origin比target胖或者target比origin胖),正常

  3. 对象属性还是对象的情况会进行深层比较,正常

  4. 两个空对象比较返回true,正常

示例

2. URL Query参数解析

获取URL的query指定参数的值

也可用URLSearchParams来取得类似的功能, 见 https://www.sitepoint.com/get-url-parameters-with-javascript/

直接传入query字符串中的key参数即可

代码如下:

function getUrlParam(name) {  
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象  
    var r = window.location.search.substr(1).match(reg);  //匹配目标参数  
    if (r != null) return unescape(r[2]); return null; //返回参数值  
}

示例:

https://www.baidu.com/s?ie=UTF-8&wd=word

我想取wd对应的value值,直接调用getUrlParam('wd')即可

博主有话说

秋招结束,飘着心终于放下了,我一定赶紧赶快更赶快更,虽然还没什么人看0.0

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注