Underscore 是一个JavaScript实用库,提供了相似Prototype.js的一些功能,可是没有继承任何JavaScript内置对象。它弥补了部分jQuery没有实现的功能,同时又是Backbone.js必不可少的部分。html
Underscore提供了80多个函数,包括经常使用的: map, select, invoke — 固然还有更多专业的辅助函数,如:函数绑定, JavaScript模板功能, 强类型相等测试, 等等. 在新的浏览器中, 有许多函数若是浏览器自己直接支持,将会采用原生的,如 forEach, map, reduce, filter, every, some 和 indexOf.浏览器
Underscore 是一个我坚持看完的js源代码,他简单、易懂、实用,细心观察就会发现,每一个函数都很简短,做为开源阅读源码,我相信Underscore是不错的选择函数
1:大量的这种方法,应该是 方式原始方法被篡改,同时加快运行速度,而言严格模式后,也不让经过arguments.callee 调用相关方法的饿缘由吧测试
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; // Create quick reference variables for speed access to core prototypes. var push = ArrayProto.push, slice = ArrayProto.slice, concat = ArrayProto.concat, toString = ObjProto.toString, hasOwnProperty = ObjProto.hasOwnProperty;
2:void 0,开始还好奇为啥用void 0,是undefined 的缩写?后来一打听才知道,原来undefined在旧版本的浏览器中是不能够被赋值的,而新版本的浏览器是能够被赋值的,为了准确的判断,因此就有了void 0ui
_.first = _.head = _.take = function(array, n, guard) { if (array == null) return void 0; if ((n == null) || guard) return array[0]; if (n < 0) return []; return slice.call(array, 0, n); };
3:代码短小精干prototype
Underscore 代码短小精干没的说,真是精品调试
除了 eq 这个方法长点外 其余方法都很短htm
4:遗憾 此次走读 没记录笔记没调试对象