惯用语`Number`对象在JavaScript中编号文字转换

时间:2011-10-21 05:05:56

标签: javascript object literals idiomatic

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 个答案:

答案 0 :(得分:2)

我认为valueOf是首选,因为Number转换意味着与不是Number个对象的值一起使用,而且 - Number(x)会调用valueOf上的x方法, 基本上,你会添加一个不必要的糖/开销,其中valueOf是一种完全可以接受的方式来接收对象的原始表示(Number在你的情况下)。

作为旁注:

  

为了记录,我正在一个方法中处理这个问题   Number.prototype,我可以确定这始终是一个数字   对象

这是不正确的,因为总有可能有人会做这样的事情:

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

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

var foo = x.test;
foo();

当然会提供:

Number
DOMWindow

作为输出。这是你决定是否要反抗它。

答案 1 :(得分:0)

为什么使用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