Идиоматический `Number` объект в преобразование литерала числа в JavaScript - PullRequest
3 голосов
/ 21 октября 2011

Number функция

> var x = new Number(5)
> x === 5
false
> Number(x) === 5
true

valueOf метод

> var y = new Number(5)
> y === 5
false
> y.valueOf() === 5
true

Какой вариант предпочтительнее? Есть ли преимущества в использовании одного над другим?

Кстати, я имею дело с this в методе Number.prototype, где я могу быть уверен, что this всегда является Number объектом.

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

Я думаю, что valueOf предпочтительнее, поскольку преобразование Number предназначено для использования со значениями, которые еще не являются Number объектами, но более того - Number(x) вызовет метод valueOf для xпо сути, вы бы добавили ненужный сахар / накладные расходы, где valueOf - это совершенно приемлемый способ получения примитивного представления объекта (Number в вашем случае).

В качестве примечания:

Для справки, я имею дело с этим в методе Number.prototype, где я могу быть уверен, что это всегда объект Number.

это не правильно, поскольку всегда есть вероятность, что кто-то сделает что-то вроде этого:

Number.prototype.test = function()
    {
        console.log(this);
    }

var x = new Number(10);
x.test();

var foo = x.test;
foo();

, конечно, предоставит:

Number
DOMWindow

в качестве вывода.Вам решать, хотите ли вы защищаться от этого.

0 голосов
/ 21 октября 2011

Почему вы используете объекты Number?Я думаю, ты просто усложняешь жизнь.Чтобы преобразовать объект Number в числовой примитив, вы можете использовать оператор «+»:

var x = new Number(5);
var y = new Number(5);
alert(x == y); // false
alert(+x == +y); // true

Для развлечения:

Number.prototype.whatIsThis = function() {return typeof this;};

var x = new Number(5);
var y = 5;
alert( x.whatIsThis());  // Object
alert( y.whatIsThis());  // Object

alert( y ==   x );  // True
alert( y ===  x );  // False
alert( y === +x );  // True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...