5.18 matcher

5.18.1 语法

_.matcher(attrs)

5.18.2 说明

返回一个断言函数
这个函数传入对象,判断的对象是否匹配attrs,返回布尔值

5.18.3 代码示例

示例一:基本用法

//返回的函数可判断是否匹配{age: 10}
var isOldTen = _.matcher({age: 10}); //返回一个函数

isOldTen({age : 9}); //=> false
isOldTen({age : 10}); //=> true

示例二:应用在遍历上

var isMale = _.matcher({sex: 'm'});
var isFemale = _.matcher({sex: 'f'});

var list = [{
    name: 'kyo',
    sex: 'm'
}, {
    name: 'terry',
    sex: 'm'
}, {
    name: 'atina',
    sex: 'f'
}];

//迭代器独立出来可多次使用
var males = _.filter(list, isMale); 
var females = _.filter(list, isFemale);

5.18.3 返回的函数是稳定的

https://github.com/jashkenas/underscore/issues/1729

var object = {name: 1};
var func = _.matcher(object);

//之后object改变了也不影响。
object.name = 2;

func({name: 1}); //=> true

5.18.4 null和undefined为传入对象

//不过空对象的attrs好像没什么意义
_.matcher({})(null); //=> true
_.matcher({a: 1})(null) //=> false

_.matcher({})(undefined); //=> true
_.matcher({a: 1})(undefined) //=> false