angular.isBoolean的实现?

时间:2014-07-02 15:51:16

标签: javascript angularjs underscore.js lodash

我正在审核一些源代码,而下划线/ lodash仅包含在_.isBoolean函数中。 underscore source位于以下位置:

_.isBoolean = function(obj) {
    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
};

查看Function components in ng我看到了类似的功能(angular.isObjectangular.isStringangular.isNumber等),但没有angular.isBoolean功能。

angular.js来源有一个内部函数(下面的源代码),但请求公开(feat: register isBoolean as a public member of global angular #5185)的问题已关闭说"其他库如下划线和lodash解决了这些问题井"

function isBoolean(value) {
  return typeof value === 'boolean';
}

问题

  • 我最初的反应是复制isBoolean并在我的代码中创建一个命名函数,但哪个实现更正确?
  • 我是否会使用下划线版本来预期与未来升级的兼容性?
  • 我认为这是一个糟糕的主意" duck punch"我的实施到angular.isBoolean

1 个答案:

答案 0 :(得分:14)

  

我正在审查一些源代码,而下划线/ lodash仅包含在_.isBoolean函数中。 [...]我最初的反应是将isBoolean转换为本地函数

是的,好主意(如果你强调只是)。也许甚至不是一个功能,而只是内联它。

  

但哪种实施更正确?

当传入Boolean class实例的对象时,它们的行为会有所不同。在您正在审核的应用中是否会出现这种情况?可能不是。如果他们这样做,只有你知道是否要将它们视为布尔值。

除此之外,val === true || val === falsetypeof val == "boolean"具有相同的效果。

  

我认为这是一个糟糕的主意" duck punch"我的实施到angular.isBoolean

角度不可能做到这一点,所以你几乎不会引发碰撞。不过,问问自己:它在那里真的有用吗?其他代码会使用它吗?有关更多讨论,请查看Don't modify objects you don't own