В JavaScript один из надежных способов преобразовать строку в число Number
конструктор:
var x = Number('09'); // 9, because it defaults to decimal
Вдохновленный этим вопросом, я начал задаваться вопросом — что является различием между вышеупомянутым и:
var x =new Number('09');
Number
конечно, взгляды лучше, но это походит на немного несоответствующее использование конструктора. Есть ли какие-либо побочные эффекты или какое-либо различие к использованию его без нового? Если нет никакого различия, почему не, и какова цель новых?
В первом случае вы используете Конструктор чисел, вызываемый как функция , как описано в Спецификации, который просто выполняет преобразование типа, возвращая вам примитив Number
. .
Во втором случае вы используете конструктор Number
для создания объекта Number
:
var x = Number('09');
typeof x; // 'number'
var x = new Number('09');
typeof x; // 'object'
Number('1') === new Number('1'); // false
Разница может быть незначительной, но я думаю Важно отметить, как объекты оболочки действуют на примитивные значения.
Число
возвращает примитивное числовое значение. Да, немного странно, что вы также можете использовать функцию-конструктор как простую функцию, но именно так определяется JavaScript. Большинство встроенных типов языка имеют странные и непоследовательные дополнительные функции, подобные этой.
new Number
создает явный упакованный объект Number
. Разница:
typeof Number(1) // number
typeof new Number(1) // object
В отличие от упакованных в коробку примитивных классов Java, в JavaScript явные объекты Number
абсолютно бесполезны .
Я бы не стал беспокоиться об использовании номера
. Если вы хотите быть явным, используйте parseFloat ('09 ')
; если вы хотите быть кратким, используйте + '09'
; если вы хотите разрешить только целые числа, используйте parseInt ('09 ', 10)
.
SpiderMonkey-1.7.0:
js> typeof new Number('09');
object
js> typeof Number('09');
number