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).
if (x === +x)
...can be used to confirm that x
itself contains an integer value. In this case it may be to make sure that the length property of obj
is an integer and has not been overwritten by a string value, as that can screw up iteration if obj
is treated as an array.
It is a silly (IMO) way of checking if obj.length
is a Number. This is better:
typeof obj.length == "number"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With