为什么lodash .isNumber函数比typeof value =='number'更复杂

时间:2019-06-19 09:05:11

标签: javascript lodash

Lodash isNumber函数有一个附加条件来检查值是否为数字。我不确定为什么要这样做,在哪种情况下仅使用typeof value == 'number'

是不够的
function isNumber(value) {
  return typeof value == 'number' ||
    (isObjectLike(value) && getTag(value) == '[object Number]')
}

https://github.com/lodash/lodash/blob/aa1d7d870d9cf84842ee23ff485fd24abf0ed3d1/isNumber.js

2 个答案:

答案 0 :(得分:3)

虽然Number()函数将创建一个数字基元,但Number()构造函数将创建一个Number对象:

typeof Number(0) // 'number'
typeof new Number(0) // 'object'

Lodash会检查这两种情况。

答案 1 :(得分:3)

从您的链接:

  

检查value是否归类为Number原语或对象

var n = new Number(3);
console.log(typeof n); // "object"
console.log(_.isNumber(n)); // true

MDN - Number

  

Number JavaScript对象是一个包装对象,可用于处理数值。使用Number()构造函数创建一个Number对象。使用Number()函数创建原始类型的对象编号。