为什么下划线与其类型检查不一致?

时间:2014-11-03 22:05:14

标签: javascript underscore.js

例如它有isNumber(),它使用toString来检测原始数字和"盒装"号。

但稍后在其代码中,它将使用不会检测盒装值的typeof。

我知道typeof更快,但会错过盒装值。

这个问题也出现在我的代码库中,为什么我会问这个问题。如果你没有使用自己的功能,为什么会有其他人"。

我在这里遗失了什么:

Use of typeof

if (typeof isSorted == 'number') {

isNumber defenition

_.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
    _['is' + name] = function(obj) {
      return toString.call(obj) === '[object ' + name + ']';
    };
  });

1 个答案:

答案 0 :(得分:1)

该行是方法的一部分,该方法需要booleannumber作为其第三个参数。

_.indexOf = function(array, item, isSorted) {
    if (array == null) return -1;
    var i = 0, length = array.length;
    if (isSorted) {
      if (typeof isSorted == 'number') {
        i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted;
      } else {
        i = _.sortedIndex(array, item);
        return array[i] === item ? i : -1;
      }
    }
    for (; i < length; i++) if (array[i] === item) return i;
    return -1;
  };

如果你传递了一些意想不到的东西(比如盒装号码),那就会是barf,这就是你的问题,而不是他们的问题。