在JavaScript中使用标识功能

时间:2012-07-14 16:39:28

标签: javascript function functional-programming identity use-case

我在所有JavaScript程序中使用identity函数:

function identity(value) {
    return value;
}

原因是我经常需要区分基元类型(undefinednullbooleannumberstring)和对象类型({由object运算符返回的{1}}和function)。我觉得在这个用例中使用indentity函数非常多汁:

typeof

标识函数比以下代码小得多且简单:

if (new identity(value) == value); // value is of an object type
if (new identity(value) != value); // value is of a primitive type

然而,在阅读我的代码时,我的一位朋友抱怨说我的黑客比上述替代方案更具误导性且计算成本更高。

我不想从我的任何程序中删除此功能,因为我认为这是一个优雅的黑客。然后我再也不为自己编写程序。 JavaScript中的身份函数还有其他用例吗?

2 个答案:

答案 0 :(得分:13)

IMHO:

new identity(value) == value

绝对没有任何意义,如果没有额外的评论我将不得不考虑一段时间来弄清楚意图是什么。另一方面:

isObject(value)
无论如何实施,

从一开始就很明显。为什么你不能在里面使用名为isObject()的函数?

BTW更适合http://codereview.stackexchange.com

答案 1 :(得分:6)

我更新了我的“speedtest”以测试是否返回了正确的结果......它们不是:

如果您与new identity(x) == x进行比较,那么null将被视为对象。 ===虽然有效。

这些陷阱支持isObject(...)解决方案。

如果您在=== 'object'代码中比较'function' / isObject,那么它的速度将是原始实施的两倍,比new identity(x) === x快三分之一。