Ответ 1
+length
- это метод преобразования чего-либо в число.
Если это число, значение не изменяется, и сравнение возвращает true.
Если это не число, утверждение ложно.
Я нашел код из Underscore.js
_.map = _.collect = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
each(obj, function(value, index, list) {
results[results.length] = iterator.call(context, value, index, list);
});
if (obj.length === +obj.length) results.length = obj.length;
return results;
};
Я хотел бы знать, что делает if (obj.length === +obj.length)
?
+length
- это метод преобразования чего-либо в число.
Если это число, значение не изменяется, и сравнение возвращает true.
Если это не число, утверждение ложно.
Это унарный + оператор. На этом веб-сайте есть отличная статья о его использовании с различными типами данных в javascript.
http://xkr.us/articles/javascript/unary-add/
Я украду введение, но действительно стоит прочитать, если вы входите в javascript.
В JavaScript можно использовать оператор + только до один элемент. Это указывает на математическую операцию и пытается преобразовать элемент к числу. Если преобразование не удастся, оно будет NaN. Это особенно полезно, когда нужно преобразовать строку в быстро, но также может использоваться для выбора другого типа.
Оператор унарного +, если он используется для типов, отличных от строки, будет внутренне пытайтесь вызвать valueOf() или toString() (в этом порядке) и затем попытайтесь преобразовать результат в число. Таким образом, унарные + оператор может успешно преобразовать многие родные типы JS с определенные ограничения:
Это тест, если obj.length
- номер.
Выполнение арифметической операции над строкой преобразует ее в integer (и + - это унарная операция, которая ничего не делает:-)), а === оператор делает типовое сравнение
a === b <=> (a == b) && (typeof a) == (typeof b)
Я предлагаю вам попробовать этот
console.log(typeof + "3" ) = номер
console.log(typeof "3" ) = строка
Это делает все понятным.