关于underscore源码中map方法的一点疑问?

_.map=_.collect=function(obj,iteratee,context){
iteratee=cb(iteratee,context);
//这里的keys是希望得到一个数组吧,而实际源码中会得到一个Boolean值
//是否应该换成这种写法?keys=!isArray(obj)?_.keys(obj):void0
varkeys=!isArrayLike(obj)&&_.keys(obj),
length=(keys||obj).length,
results=Array(length);
for(varindex=0;indexvarcurrentKey=keys?keys[index]:index;
results[index]=iteratee(obj[currentKey],currentKey,obj);
}
returnresults;
};
米琪卡哇伊
浏览 351回答 2
2回答

拉丁的传说

需要注意的是&&和||的用法,当使用a&&b的时候,如果a是假值,则不会对b求值;当使用a||b的时候,如果a是真值,则不会对b求值;//当obj是数组的时候,keys是false,当obj不是数组的时候,返回键值组成的数组varkeys=!isArrayLike(obj)&&_.keys(obj),//当obj是数组的时候,keys是false,所以(keys||obj)的结果是obj,所以length=obj.length,注意因为obj是数组,所以obj.length正好是数组的长度;//当obj不是数组的时候,keys是obj的键值组成的数组;length=(keys||obj).length,results=Array(length);for(varindex=0;index

叮当猫咪

你可以去了解一下js的短路运算符。a&&b意思是a如果是true则返回b,a如果是false则返回aa||b意思是a如果是false则返回b,a如果是true则返回a
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript