Reading through the source code of underscore.js I stumbled upon the following line:
... if (obj.length === +obj.length) { ...
That's a bit confusing for me. What is actually being compared here? I believe it has something to do about detecting native arrays, but cannot figure out what's actually going on. What does the + do? Why use === instead of ==? And what are the performance benefits of this style?
The
+coerces the value to an Number (much like!!coerces it to a boolean)....can be used to confirm that
xitself contains an integer value. In this case it may be to make sure that the length property ofobjis an integer and has not been overwritten by a string value, as that can screw up iteration ifobjis treated as an array.