我最近升级到Lodash 3.10.1,发现有些奇怪。
假设我有一个数字数组,我想获得数组中的最大值,然后取一半:
var series = [ 6, 8, 2 ];
var highestTotal = _.chain(series)
.max();
console.log('highestTotal is ', highestTotal);
var halved = highestTotal / 2;
console.log('halved is ', halved);
我本以为这会引发错误,因为
highestTotal
是Lodash包装器。即我认为必须这样做:var halved = highestTotal.value() / 2;
为了它的工作。但事实并非如此!这是怎么回事?
Jsfiddle是here。
最佳答案
这是因为lodash包装器对象公开了.valueOf
方法(别名为.value
),并在需要原始值(例如在算术运算中)时由JavaScript自动调用。
From the MDN:
function myNumberType(n) {
this.number = n;
}
myNumberType.prototype.valueOf = function() {
return this.number;
};
myObj = new myNumberType(4);
myObj + 3; // 7