Lodash 源码 | 1 Lodash 如何判断数据类型 I

阅读 Lodash 的第一部分源码是关于如何可靠地判断数据类型的

Lodash 一共有 31 个 API 用于判断数据类型,今天分析其中 3 个,另外 28 个 API 会在后续的文章中分析。

JS 中对于对象类型的判断,极为复杂,不仅需要考虑语言本身的设计问题,还需要具备原型与原型链的知识,以及 ES6 相关的储备。

在 Lodash 中提供了 isObject(), isObjectLike() 和 isPlainObject() 三个函数进行可靠地判断,它们对对象如何进行分类?背后的原理又是什么?

Part 1. isObject()

广义对象

即引用类型。引用类型是一种数据结构,用于将数据和功能组织在一起,描述的是一类对象所具有的属性和方法。

通过上面的定义,我们可以清楚对象、数组、函数、Set、Map 等都是引用类型。OK,现在我们明确了范围,那么怎样可以判断出来呢?

原生 JS 提供了 typeof 操作符,但是却存在着致命缺陷!

typeof null === 'object'
// => true

function fn() {
   }

typeof fn === 'object'
// => false

null 不满足广义对象的定义,却被 typeof 判断为一个对象;另外,函数满足广义对象的定义,却无法被 typeof 判断为一个对象。

通常,我们去判断广义对象(引用类型),必须要考虑这两种情况。通过下面 isObject() 的源码可以看到,Lodash 也是这样做的:

function isObject(value) {
   
  const type = typeof value
  return value != null && (type == 'object' || type == 'function')
}

Part 2. isObjectLike()

函数有何不同?

上面我们已经知道,无法通过 typeof 来判断一个函数是一个对象&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值