Каково различие между “новым Числом (…)” и “Числом (…)” в JavaScript?

В JavaScript один из надежных способов преобразовать строку в число Number конструктор:

var x = Number('09'); // 9, because it defaults to decimal

Вдохновленный этим вопросом, я начал задаваться вопросом — что является различием между вышеупомянутым и:

var x =new Number('09');

Number конечно, взгляды лучше, но это походит на немного несоответствующее использование конструктора. Есть ли какие-либо побочные эффекты или какое-либо различие к использованию его без нового? Если нет никакого различия, почему не, и какова цель новых?

9
задан Community 23 May 2017 в 10:29
поделиться

3 ответа

В первом случае вы используете Конструктор чисел, вызываемый как функция , как описано в Спецификации, который просто выполняет преобразование типа, возвращая вам примитив Number . .

Во втором случае вы используете конструктор Number для создания объекта Number :

var x = Number('09');
typeof x; // 'number'

var x = new Number('09');
typeof x; // 'object'

Number('1') === new Number('1'); // false

Разница может быть незначительной, но я думаю Важно отметить, как объекты оболочки действуют на примитивные значения.

13
ответ дан 4 December 2019 в 12:18
поделиться

Число возвращает примитивное числовое значение. Да, немного странно, что вы также можете использовать функцию-конструктор как простую функцию, но именно так определяется JavaScript. Большинство встроенных типов языка имеют странные и непоследовательные дополнительные функции, подобные этой.

new Number создает явный упакованный объект Number . Разница:

typeof Number(1)      // number
typeof new Number(1)  // object

В отличие от упакованных в коробку примитивных классов Java, в JavaScript явные объекты Number абсолютно бесполезны .

Я бы не стал беспокоиться об использовании номера . Если вы хотите быть явным, используйте parseFloat ('09 ') ; если вы хотите быть кратким, используйте + '09' ; если вы хотите разрешить только целые числа, используйте parseInt ('09 ', 10) .

4
ответ дан 4 December 2019 в 12:18
поделиться

SpiderMonkey-1.7.0:

js> typeof new Number('09');
object
js> typeof Number('09');
number
0
ответ дан 4 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: