请解释_.identity(value)
下划线.js 的用法。无法从文档(http://underscorejs.org/#identity)中理解它。
你能提供一些它的用法例子吗?
请解释_.identity(value)
下划线.js 的用法。无法从文档(http://underscorejs.org/#identity)中理解它。
你能提供一些它的用法例子吗?
一个涉及身份的 JavaScript 代码模式是根据真实性过滤值,例如
var a = [null, null, [1,2,3], null, [10, 12], null];
a.filter(_.identity)
产生 [Array[3], Array[2]]。
使用
_.compact(a)
更清晰,但可能根本不使用 lodash 或下划线,例如
function identity(x) {
return x;
}
a.filter(identity)
出于几个原因,它是否是一个好的代码模式值得怀疑,但它正在被广泛使用。
这根本不是 NOOP。NOOP 在例如汇编中是一种命令式构造,而在函数式编程中,它与其他函数一样返回一个值。如果 identity 是 NOOP,那么所有的纯函数也可以被认为是 noop,这不是一件明智的事情。
它本质上是一个无操作功能。它返回传递给它的任何值。
关于它在库本身中用作“默认迭代器”的部分意味着在其他可能具有可选“迭代器”参数的函数中(可能用作应用于某种数组的每个元素的函数) ,如果没有传递迭代器参数,库将使用这个“无操作”迭代器,并且数组的元素将保持不变。
一个具体的例子:
Underscore.js 定义了 _.each ,就像这样。
_.each = function(obj, iterator, context) {
...
}
此迭代器显示 el 值。你可能用过这个成语。
_.each([1, 2, 3], function(el){
console.log(el);
});
此迭代器返回 el 值而不作任何更改。
_.each([1, 2, 3], function(el){
return el;
});
返回值不变的函数经常出现。所以 Underscore.js 想要定义函数。Underscore.js 将函数命名为 _.identity。
_.identity = function(value) {
return value;
};
如果 Underscore.js 想要使用默认迭代器,Underscore.js 只需要调用 _.identity。
_.each([1, 2, 3], _.identity);