2016-07-20 54 views
2

我最近升級到Lodash 3.10.1,我注意到一些奇怪的東西。Lodash Wrapper對象的Javascript部門

說我有數字的數組,我想在數組中的最大值,則它的一半:

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

回答

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