Подтвердить что ты не робот

Obj.length === + obj.length в javascript

В источнике underscore.js во многих местах я сталкивался с

if (obj.length === +obj.length)

Может кто-нибудь объяснить, зачем они его используют?

4b9b3361

Ответ 1

Это другой способ записи if (typeof obj.length == 'number'). Почему они так делают, это все догадываются. Наверное, пытается быть умным за счет удобочитаемости. Что не слишком необычно в эти дни, к сожалению...

Хотя это может быть так, что он может быть сжат больше minifiers (YUI Compressor, Closure Compiler, UglifyJS и т.д.):

(a.length===+a.length) vs (typeof a.length=='number')

Выполнение этого способа позволит сохранить 5 байтов, каждый экземпляр.

Ответ 2

Это проверяет, является ли свойство obj length числом.

Оператор унарный + преобразует свой операнд в число, а строгого оператора равенства сравнивает результат с исходным свойством 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 числом.