const isBasicType = (t: any) => {
return t === "number" || t === "string" || t === "boolean" || t === 'undefined';
}

/**
* 数组和对象都能比较
* @param a
* @param b
* @returns {boolean}
*/
function compareByObject(a:any,b:any){
const keysA = Object.keys(a);
const keysB = Object.keys(b);
if (keysA.length !== keysB.length) {
return false;
}

const bHasOwnProperty = Object.prototype.hasOwnProperty.bind(b);
for (let idx = 0; idx < keysA.length; idx++) {
const key = keysA[idx];
if (!bHasOwnProperty(key) || a[key] !== b[key]) {
return false;
}
}
return true;
}

const shallowEqual = (a:any, b:any) => {

const aType = typeof a;
const bType = typeof b;

if (aType !== bType) {
return false;
}

if (isBasicType(aType) && isBasicType(bType)) {
return a === b;
}

if (typeof a !== "object" || !a || typeof b !== "object" || !b) {
return false;
}

if (a === b) {
return true;
}

return compareByObject(a,b);
};

export {
shallowEqual
}

[js函数] shallowEqual的更多相关文章

  1. 3.3 js函数

    1.函数语法: 函数声明的方式:function 函数名(参数1,参数2-){//函数体;}函数调用:函数名(参数1,参数2-); 函数内不一定都指定返回值. 如果需要指定返回值,可用 return ...

  2. Js函数function基础理解

    正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...

  3. js函数表达式和函数声明的区别

    我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ...

  4. 通用js函数集锦<来源于网络> 【二】

    通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ...

  5. 通用js函数集锦<来源于网络/自己> 【一】

    通用js函数集锦<来源于网络/自己>[一] 1.返回一个全地址2.cookie3.验证用户浏览器是否是微信浏览器4.验证用户浏览器是否是微博内置浏览器5.query string6.验证用 ...

  6. 100多个基础常用JS函数和语法集合大全

    网站特效离不开脚本,javascript是最常用的脚本语言,我们归纳一下常用的基础函数和语法: 1.输出语句:document.write(""); 2.JS中的注释为//3.传统 ...

  7. JS函数

    1.document.write(""); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->(head,body)4.一个浏 ...

  8. js函数和运算符

    函数是由事件驱动或者它被调用时执行可重复使用的代码块. <script> function myFunction(){ Alert(“hello World!”): } </scri ...

  9. JavaScript学习03 JS函数

    JavaScript学习03 JS函数 函数就是包裹在花括号中的代码块,前面使用了关键词function: function functionName() { 这里是要执行的代码 } 函数参数 函数的 ...

  10. JSF页面中使用js函数回调后台bean方法并获取返回值的方法

    由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的, ...

随机推荐

  1. 触觉仿真系统:Force Dimension+CHAI 3D

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链 Force Dimension 成立于2001年,总部在瑞士,比sensable 晚了8年,开发的理念也不一样,他们开发是连杆式力反馈触觉系统,仿 ...

  2. 空间数据库中ST_开头的来由

    1. 引言 在使用空间数据库(如,PostGIS)时,我们经常使用的空间函数(如,ST_Distance(geometry, geometry).ST_Area(geometry)等)都是以ST_开头 ...

  3. Java处理正则匹配卡死(正则回溯问题)

    目录 背景 项目现场问题 问题跟踪 优化方案 处理正则问题 使用子线程来匹配正则实现 监控线程实现 最优选择方案 参考文章 正则匹配卡死怎么来的? 背景 背景:这次问题的背景是项目上遇到了,在使用正则 ...

  4. 支持管道、重定向、*匹配的miniShell

    先上成果图 源代码 仅供技术点的分享,抄袭者就算了,所以main.c就不贴了 /* * split_line.c */ #include <stdio.h> #include <st ...

  5. uniapp中关于navigateBack返回刷新,h5和小程序端

    注意: 小程序中,如果路径中有参数,在生命周期onLoad()中需要获取,可以用beforePage.options 就能获取到url中的参数

  6. RestTemplate 请求

    @Autowired private RestTemplate httpRestTemplate; String code= request.getParameter("code" ...

  7. marker的存储组---layerGroup

    1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...

  8. 数值分析之解线性方程组的直接方法 5.X

    矩阵 谱分解 设 \(\boldsymbol{A}=a_{i j} \in \mathbb{R}^{n \times n}\) , 若存在数 \(\lambda\) (实数或复数) 和非零向量 \(\ ...

  9. docker自动化启动停止脚本

    docker一键启动命令 sh auto.sh [start|restart|stop] [keywords...] keywords可选(包含编号,镜像名,容器名称,端口) 其中defaultLis ...

  10. 【微信公众号】记一次微信活动微信公众号分享没有LOGO的解决心路历程

    微信类的活动测过好几次了,以前的开发从来没有出过纰漏,这次也以为很简单.结果一个"分享后没有LOGO的问题",前端开发陆陆续续花了一周时间都不能解决,老是找后端和微信公众号配置问题 ...