Lodash源码解读之isBoolean()

isBoolean()

在Lodash中,isBoolean()是一个用于检查给定值是否为布尔值的函数。它接受一个参数并返回一个布尔值,如果参数是布尔值则返回true,否则返回false。

它的源码如下:

function isBoolean(value) {
      return (
        value === true ||
        value === false ||
        (isObjectLike(value) && getTag(value) == "[object Boolean]")
      );
    }

在return中的第一第二行很好理解,但为什么会有第三行呢?

原因是JavaScript 中还存在布尔对象这一概念,布尔对象不会等于true或者false,它是 Boolean 对象的实例,其 typeof 值为 "object"。

console.log(typeof new Boolean(false));   //object
console.log(new Boolean(false) === false);  //false

布尔对象满足两个条件:

一、它是一个对象。

二、它的Object.prototype.toString() 值为"[object Boolean]"。

要判断value是否是一个布尔对象就需要用到isObjectLike()与getTag()。

isObjectLike()

isObjectLike()用于判断是否是一个对象且不为null,在lodash源码中有大量的应用。

function isObjectLike(value) {   
      return typeof value === "object" && value !== null;
    }

因为null在js中会被识别为对象,所以这里做了处理

getTag()

getTag()用于判断value的数据类型。

function getTag(value) {
      if (value == null) {
        return value === undefined ? "[object Undefined]" : "[object Null]";
      }
      return toString.call(value);
    }

因为Js中 null == undefined 为true,为了识别value到底是null还是undefined,所以在这里对两者做了判断。

toString.call(value) 常用于判断数据类型 ,相当于调用了Object.prototype.toString.call(value) 。

通过 (isObjectLike(value) && getTag(value) == "[object Boolean]"),我们就可以轻松地判断出value是否是布尔值啦

本文用于记录自己的源码学习,欢迎大家指出错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值