Use of the identity function in JavaScript
Solution 1
I updated my "speedtest" to test if the right results are returned … they aren't:
If you compare with new identity(x) == x
, then null
is deemed an object. ===
works, though.
Such pitfalls speak in favor of the isObject(...)
solution.
If you compare === 'object'
/'function'
in the isObject
code, then it will be double as fast as your original implementation, and almost a third faster than new identity(x) === x
.
Solution 2
IMHO:
new identity(value) == value
means absolutely nothing and without extra comment I would have to think for a while to figure out what the intent was. On the other hand:
isObject(value)
is obvious from the very beginning, no matter how it is implemented. Why can't you use your hack inside a function named isObject()
?
BTW More suited for http://codereview.stackexchange.com.
Aadit M Shah
Computer science engineer with over ten years of experience in software development. Implemented web development, web analytics, and information technology solutions for both Cloud 100 and startup companies. Contributed to several open source software projects, with over 1.2 million aggregate downloads.
Updated on July 29, 2022Comments
-
Aadit M Shah over 1 year
I use the identity function in all my JavaScript programs:
function identity(value) { return value; }
The reason is that I often need differentiate between primitives types (
undefined
,null
,boolean
,number
andstring
) and object types (object
andfunction
) as returned by thetypeof
operator. I feel using the indentity function for this use case very succuint:if (new identity(value) == value); // value is of an object type if (new identity(value) != value); // value is of a primitive type
The identity function is much smaller and simpler than the following code:
function isObject(value) { var type = typeof value; return type == "object" || type == "function"; }
However on reading my code a friend of mine complained that my hack is misleading and more computationally expensive than the above alternative.
I don't want to remove this function from any of my programs as I believe it's an elegant hack. Then again I don't write programs solely for myself. Is there any other use case for the identity function in JavaScript?