В источнике underscore.js во многих местах я сталкивался с
if (obj.length === +obj.length)
Может кто-нибудь объяснить, зачем они его используют?
Ответ 1
Это другой способ записи if (typeof obj.length == 'number'). Почему они так делают, это все догадываются. Наверное, пытается быть умным за счет удобочитаемости. Что не слишком необычно в эти дни, к сожалению...
Выполнение этого способа позволит сохранить 5 байтов, каждый экземпляр.
Ответ 2
Это проверяет, является ли свойство objlength числом.
Оператор унарный + преобразует свой операнд в число, а строгого оператора равенства сравнивает результат с исходным свойством length без выполнения принуждения типа.
Следовательно, выражение будет true, если obj.length является фактическим числом (например, строкой, которая может быть преобразована в число).
Ответ 3
Я думаю, что основная причина, по которой они тестируются, если obj.length является числом, - это различать obj тип объекта из [object Array] (он будет работать и с объектами String и Function).
Объект объекта не имеет свойства length.
поэтому, если
obj = {a:1, b:2}; //obj.length = undefined
obj.length === +obj.length
undefined === NaN //false - you know that your obj has type Object
// (or some other object, but not Array, !String and !Function)
// so, you need to determine size of the obj in some way
// or use for in loop to iterate over your obj
рассматривает
P.S.: IMO отвечает на вторую часть вопроса "почему они используют"?
Ответ 4
+obj.length поверните obj.length в число.
Я думаю, что это проверить, является ли obj.length числом.