JS判断两个变量是否相等

前言

JS中判断两个变量是否相等,是我们经常遇到的问题。今天我要探讨的问题是如何优雅的比较复杂变量。

  • JS中比较变量相等的原生方法
    • ===== (建议都使用===,因为==造成类型隐形转换)
    • Object.is(value1, value2)
    • value.toString()
    • …等等一些方法

以上的方法都只能比较简单变量,无法比较引用类型变量(如Array,Object)。如何优雅判断复杂变量是否相等? 不多废话,直接上代码。


function isObject(obj) {
  return typeof obj === 'object' && obj !== null
}

function isEqual(a, b) {
  if (a === b) return true
  var isObjectA = isObject(a)
  var isObjectB = isObject(b)
  if (isObjectA && isObjectB) {
    try {
      var isArrayA = Array.isArray(a)
      var isArrayB = Array.isArray(b)
      if (isArrayA && isArrayB) { // a b都是数组
        return a.length === b.length && a.every((el, index) => isEqual(el, b[index]))
      } else if (a instanceof Date && b instanceof Date) { // a b都是Date对象
        return a.getTime() === b.getTime()
      } else if (!isArrayA && !isArrayB) { // 此时a b都是纯对象
        var keyA = Object.keys(a)
        var keyB = Object.keys(b)
        return keyA.length === keyB.length && keyA.every(key => isEqual(a[key], b[key]))
      } else {
        return false
      }
    } catch (e) {
      console.log(e)
      return false
    }
  } else if (!isObjectA && !isObjectB) { // a b 可能是string,number,boolean,undefined中的一种
    return String(a) === String(b)
  } else {
    return false
  }
}

这个isEqual函数可以判断绝大部分复杂对象 (除了对象中有函数的)

本人是刚入前端的新人。如有错误,烦请指正 😉

😆 永远不要抛弃理想, 在前端这条路上,冲吧! 💪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值