Javascript 为什么不是';下划线是否与其类型检查一致?
例如,它有Javascript 为什么不是';下划线是否与其类型检查一致?,javascript,underscore.js,Javascript,Underscore.js,例如,它有isNumber(),它使用toString来检测原始数字和“装箱”数字 但稍后在其代码中,它将使用不会检测装箱值的typeof 我知道typeof速度更快,但它会丢失装箱的值 这个问题也在我的代码库中提出,以及我为什么要问这个问题。大意是“如果你不使用自己的功能,为什么其他人会使用” 这里有没有我遗漏的东西: 该行是一个方法的一部分,该方法要求将布尔值或数字作为其第三个参数 _.indexOf = function(array, item, isSorted) { if
isNumber()
,它使用toString来检测原始数字和“装箱”数字
但稍后在其代码中,它将使用不会检测装箱值的typeof
我知道typeof速度更快,但它会丢失装箱的值
这个问题也在我的代码库中提出,以及我为什么要问这个问题。大意是“如果你不使用自己的功能,为什么其他人会使用” 这里有没有我遗漏的东西:
该行是一个方法的一部分,该方法要求将
布尔值
或数字
作为其第三个参数
_.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;
};
\uuxof.indexOf=函数(数组、项、isSorted){
if(array==null)返回-1;
var i=0,length=array.length;
如果(已排序){
if(typeof isSorted=='number'){
i=isSorted<0?数学最大值(0,长度+isSorted):isSorted;
}否则{
i=uu.sortedIndex(数组,项);
返回数组[i]==项目?i:-1;
}
}
对于(;i
如果你给它传递了一些意想不到的东西(比如一个盒装的数字),它会呕吐,这是你的问题,不是他们的问题。下划线根本不使用
。
(它只定义了它),我认为这是相当一致的。装箱数字是一种反模式。“如果你不使用自己的函数,为什么其他人会使用”是我问题的核心。下划线似乎不使用isNumber()
_.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
_['is' + name] = function(obj) {
return toString.call(obj) === '[object ' + name + ']';
};
});
_.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;
};