Я столкнулся с этой строкой кода в реализации _.each Underscore.js, и мне любопытно, что здесь происходит. Что делает «+» перед объектом?Что делает префикс объекта с помощью оператора «+»?
if (obj.length === +obj.length) { ... }
Я столкнулся с этой строкой кода в реализации _.each Underscore.js, и мне любопытно, что здесь происходит. Что делает «+» перед объектом?Что делает префикс объекта с помощью оператора «+»?
if (obj.length === +obj.length) { ... }
В if
тесты, которые obj.length
числовой и не NaN
. Правая часть всегда является числом (или NaN
, если obj.length
не может быть интерпретировано как число). Это будет только ===
с левой стороны, если obj.length
также является номером.
Обратите внимание, что использование isNaN
не будет работать, если obj.length
- это числовая строка; есть isNan("3")
возвращение товара false
. Отметим также, что NaN === NaN
является false
NaN
никогда не ===
ни к чему.
Итак, в чем же смысл сравнивать свойство .length одного и того же объекта, как «принудительное число» и некогда? что это делает? – alnafie
@alnafie - Мне нужно посмотреть на код, который нужно знать, но мое первоначальное предположение было бы в том, что это ворота вокруг кода, который либо требует, чтобы 'obj.length' был числом, либо каким-то дорогим кодом для вычисления' obj.length 'который должен быть пропущен, если он уже настроен правильно. –