Идиома JavaScript: что делать, если (x === +x) делает?

Читая исходный код underscore.js Я наткнулся на следующую строку:

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

Это немного смущает меня. Что на самом деле здесь сравнивается? Я считаю, что это связано с обнаружением нативных массивов, но я не могу понять, что на самом деле происходит. Что это + делать? Зачем использовать === вместо ==? И каковы преимущества производительности этого стиля?

3 ответа

Решение

+ приводит значение к числу (очень похоже на !! приводит к логическому значению).

if (x === +x)

... можно использовать для подтверждения того, что x Сам содержит целочисленное значение. В этом случае может быть необходимо убедиться, что свойство length obj является целым числом и не было перезаписано строковым значением, так как это может испортить итерацию, если obj рассматривается как массив.

Это глупый (ИМО) способ проверить, obj.length это номер. Это лучше:

typeof obj.length == "number"

Знак + связывает то, что с правой стороны является числом.

В этом случае, если length не является свойством объекта, будет возвращено undefined. + undefined даст Nan и эта оценка будет ложной.

Если строку можно объединить в число, то это будет.. например + '1' даст 1 как Number это особенно важно при работе с шестнадцатеричными значениями в строковой форме, например +'0x7070' доходность 28784

Другие вопросы по тегам