Lodash Wrapper对象的Javascript划分

时间:2016-07-20 10:34:41

标签: javascript underscore.js lodash

我最近升级到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 Wrapper。即我会认为有必要这样做:

var halved = highestTotal.value() / 2;

让它发挥作用。但它不!这是怎么回事?

Jsfiddle是here

1 个答案:

答案 0 :(得分:2)

这是因为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