例如它有isNumber()
,它使用toString来检测原始数字和"盒装"号。
但稍后在其代码中,它将使用不会检测盒装值的typeof。
我知道typeof更快,但会错过盒装值。
这个问题也出现在我的代码库中,为什么我会问这个问题。如果你没有使用自己的功能,为什么会有其他人"。
我在这里遗失了什么:
if (typeof isSorted == 'number') {
_.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
_['is' + name] = function(obj) {
return toString.call(obj) === '[object ' + name + ']';
};
});
答案 0 :(得分:1)
该行是方法的一部分,该方法需要boolean
或number
作为其第三个参数。
_.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,这就是你的问题,而不是他们的问题。