【发布时间】:2012-07-14 04:34:59
【问题描述】:
我在所有 JavaScript 程序中都使用了标识函数:
function identity(value) {
return value;
}
原因是我经常需要区分原始类型(undefined、null、boolean、number 和 string)和对象类型(object 和 function)返回typeof 运算符。我觉得在这个用例中使用 indentity 函数非常简洁:
if (new identity(value) == value); // value is of an object type
if (new identity(value) != value); // value is of a primitive type
identity函数比下面的代码更小更简单:
function isObject(value) {
var type = typeof value;
return type == "object" || type == "function";
}
然而,在阅读我的代码时,我的一位朋友抱怨说我的 hack 具有误导性,并且比上述替代方案的计算成本更高。
我不想从我的任何程序中删除此功能,因为我认为这是一个优雅的 hack。再说一次,我不只是为自己编写程序。 JavaScript 中的标识函数还有其他用例吗?
【问题讨论】:
-
为什么不直接使用
value === Object(value)?或者,为了更易读的代码,定义isObject来使用它? -
@Cory - 我只是想找到一个身份功能的实际用例。我手头有太多时间,所以我用有趣的措辞来表达这个问题,以引起人们的注意,而不是被视为一个愚蠢的白痴,要求提供身份功能的用例。
-
最好的用途之一是使可能应用或不应用函数的代码始终如一地工作:
var func = optionalProcessFunc || identityFunc;。现在稍后在代码中,您无需了解有关此部分如何配置为运行的任何信息。更一般地,如果您想将函数视为幺半群,则将恒等函数用作 mzero 并将 compose 用作 mconcat 会很方便。 -
{x: 123} != {x:123} ,JS中的对象默认不相等,因为它有不同的引用。与该 func 本身相比,为什么从标识函数返回一个对象的计算结果为 true ?我认为构造函数返回新对象
标签: javascript function functional-programming identity use-case