Что унарное + используется в Javascript?

Я нашел код из 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)?

Ответ 1

+length - это метод преобразования чего-либо в число.

Если это число, значение не изменяется, и сравнение возвращает true.
Если это не число, утверждение ложно.

Ответ 2

Это унарный + оператор. На этом веб-сайте есть отличная статья о его использовании с различными типами данных в javascript.

http://xkr.us/articles/javascript/unary-add/

Я украду введение, но действительно стоит прочитать, если вы входите в javascript.

В JavaScript можно использовать оператор + только до один элемент. Это указывает на математическую операцию и пытается преобразовать элемент к числу. Если преобразование не удастся, оно будет NaN. Это особенно полезно, когда нужно преобразовать строку в быстро, но также может использоваться для выбора другого типа.

Оператор унарного +, если он используется для типов, отличных от строки, будет внутренне пытайтесь вызвать valueOf() или toString() (в этом порядке) и затем попытайтесь преобразовать результат в число. Таким образом, унарные + оператор может успешно преобразовать многие родные типы JS с определенные ограничения:

Ответ 3

Это тест, если obj.length - номер.

Выполнение арифметической операции над строкой преобразует ее в integer (и + - это унарная операция, которая ничего не делает:-)), а === оператор делает типовое сравнение

a === b <=> (a == b) && (typeof a) == (typeof b)

Ответ 4

Я предлагаю вам попробовать этот

console.log(typeof + "3" ) = номер

console.log(typeof "3" ) = строка

Это делает все понятным.