- JavaScript学习过程中的个人笔记,详细请看https://www.liaoxuefeng.com/wiki/1022910821149312
- 再次感谢廖大
=================================================================================== - 如同jQuery统一了不同浏览器之间DOM操作的差异,让我们可以简单地对DOM进行操作,underscore则提供了一套完善的函数式编程的接口,让我们更方便地在JavaScript中实现函数式编程。
- unserscore在加载的时候将自身绑定到唯一的全局变量
_
上。
collections
- underscore为集合类对象提供了一致的接口。集合类是指Array和Object,暂不支持Map和Set。
_.map/filter
可以作用于Object,传入的函数为function(value,key),第一个参数接收value,第二个参数接收key,返回结果是Array。当使用_.mapObject
时,返回结果是Object。_.every
:当集合的所有元素都满足条件时,返回true。_.some()
:当集合中至少一个元素满足条件时,返回ture。- 当
_.every()/some()
的集合是Object时,我们可以同时获得value和key。 _.man()/min()
:直接返回集合中最大和最小的数,当集合是object时,函数只作用于value,忽略key。_.groupBy
:把集合的元素按照key归类,key由传入的函数返回。_.shuffle()
:用洗牌算法随机打乱一个集合。_.sample()
:随机选择一个或多个元素。
####### Arrays- underscore为Array提供了许多工具类方法。
_.first()/last()
:取第一个和最后一个元素。_.flatten()
:接收一个Array,这个Array可嵌套多个Array,最后将返回一个一维数组。_.zip()/unzip()
:zip()把两个或多个数组的元素按索引对齐,然后按索引合并成新数组。unzip()则是反过来。_.object()
:类似zip()函数,但返回一个object。
Objects
keys/allkeys
:返回一个object自身所有的key,但不包括从原型链继承下来的。allkeys()包括从原型链继承下来的values
:返回object自身但不包括原型链继承的所有值。没有allvalues()mapObject
:针对object的map版本。invert
:把object的每一个key-value进行交换。extend
:把多个object的key-value合并到第一个object并返回。如果有相同的key,后面的value将覆盖前面的。extendOwn
:同上,但获取属性时忽略从原型链继承下来的属性。clone
:赋值对象,浅复制,两个对象相同的key引用的value其实是同一对象isEqual
:对两个object进行深度比较,如果完全相同,则返回true。对Array也适用。
Chaining(链式调用)
- underscore提供了把对象包装成能进行链式调用的方法,就是
chain()
var r = _.chain([1,4,9,16,25])
.map(Math.squrt)
.filter(x => x % 2 ===1)
.value();
等价于
_filter(_.map([1, 4, 9, 16, 25], Math.sqrt), x => x % 2 === 1 );
Functions
- underscore提供了大量JavaScript没有的高阶函数
bind()
:将一个对象绑定到一个变量的this指针上。partial()
:创建偏函数。用来将原函数的某些参数固定住,可以降低新函数调用的难度。可以用_作占位符来固定第二个参数。memoize()
:可以自动缓存函数计算的结果,第二次调用同参数函数的时候将直接使用缓存结果。once()
:保证某个函数执行且只能执行一次。delay()
:可以让一个函数延迟执行,效果和setTimeout()一样。