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. 题解 [ZJOI2010]排列计数

    好题. % 你赛考到了不会摆烂,后来发现原来有向下取整,题面没有...( 就算有我也做不出来啦 qAq 首先我们会发现这个长得就是小根堆,答案就变成了小根堆的计数. 首先最小的数字肯定放在根的位置.我 ...

  2. Python (进阶 第二部)

    目录 函数 闭包 匿名函数 迭代器 高阶函数 推导式 递归函数 函数 函数的定义:  功能( 包括一部分代码,实现某种功能,达成某个目的) 函数的特点:  函数可以反复调用 ,提高代码的复用性,提高开 ...

  3. 排查问题-输出pojo日志,尽量用json

    背景: 下午在做一个前后端md5加密签名校验. 前端用参数A,B,C,经过MD5加密函数,得到签名D. 然后前端带着ABCD一块来到后端. 同样的,后端拿到请求后,用MD5函数对ABC进行加密,得到签 ...

  4. Vue项目安装less和less-loader

    第一步: 查看webpack和webpack-cli是否安装打开cmd,通过命令查看 webpack -v webpack-cli -v 如果没有安装,要先进行安装 可以通过 npm view web ...

  5. [NPUCTF2020]认清形势,建立信心

    [NPUCTF2020]认清形势,建立信心 题目 from Crypto.Util.number import * from gmpy2 import * from secret import fla ...

  6. 【研究生学习】Turbo编码

    卷积码编译码 Turbo码编译码 原始文献阅读 最早记录Turbo编码的论文是NEAR SHANNON LIMIT ERROR - CORRECTING CODING AND DECODING :TU ...

  7. 第二周作业N67044-张铭扬

    1. 运行脚本可以显示出本机的ip地址 2. 如果ip地址中有3这个数字,那么就打印出当前的系统时间 3. 如果ip地址中不含3这个数字,就批量建立用户magedu_00, magedu_01, .. ...

  8. FreeRTOS内存管理文档

    heap1.c:只能申请内存,不能释放内存.适合运行后不申请新内存的程序. heap2.c: 既能申请内存,也能释放内存,但释放内存后,相邻的空余内存不能合并.适合每次申请相同大小内存的变量的程序使用 ...

  9. 【剑指Offer】【数组】数组中出现次数超过一半的数字

    题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果 ...

  10. ubuntu下升级gcc11环境

    使用ppa源升级 官网地址: https://launchpad.net/ ppa toolchan/test地址: https://launchpad.net/~ubuntu-toolchain-r ...