impeee
@impeee
nodejs/erlang developer

Что все-таки возвращает конструктор Number?

Прокомментируйте:
typeof new Number(10) // object, т.е. является объектом?


В шелле node v5.8, что сейчас под рукой:
new Number(10) // [Number: 10]
new Number(10)['Number'] // undefined

var a = new Number(10);
a['Number']; // undefined
a.Number; // undefined


Это что получается, объект с нечитабельным ключем "Number"? В гугл хроме это свойство зовется вообще, как:
{{[[PrimitiveValue]]: 10}

При арифметических операциях, объект автоматически преобразуется в число:
1 + new Number(10); // 11
new Number(10) + 1; // 11
{} + 1; // 1
1 + {}; //" 1[object Object]"


Что же все-таки возвращается конструктором?
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Оператор new всегда возвращает объект, то же кстати происходит при передаче контекста в функцию через call или apply
В js все что угодно (кроме undefined или null) может быть обернуто в объект, сделано это для того, что бы примитивы (числа, строки) имели методы из прототипа своих конструкторов

У числа нет свойства Number, а в консоли Вы видите то, что возвращает Number.prototype.toString()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
risentveber
@risentveber
fullstack web developer
Возвращает специальный объект-обертку, у кототрой метод valueOf() (который вызывается при приведении объекта к числовому виду - в данном случае при сложении) возвращает исходное число.

Интересная особенность, характерная для всех объектов:
var a = new Number(1)
var b = new Number(1)
console.log(a == b)//пишет false

A выражение
{} + 1
вообще не является выражением сложения объeкта с числом. Нужно писать так:
({}) + 1 // => "[object Object]1"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы