Идиома 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