JavaScript中习惯的“Number”对象到数字文字的转换

Idiomatic `Number` object to number literal conversion in JavaScript

本文关键字:数字 文字 转换 对象 Number 习惯 JavaScript      更新时间:2023-09-26

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

哪个是首选选项?使用其中一个比使用另一个有好处吗?

为了记录,我在Number.prototype的方法中处理this,在那里我可以确定this始终是Number对象。

我认为valueOf是首选,因为Number转换意味着与已经不是Number对象的值一起使用,但此外- Number(x)将在x上调用valueOf方法,因此,从本质上讲,您将添加不必要的糖/开销,其中valueOf是接收对象的基本表示(在您的示例中为Number)的完全接受的方式。

作为旁注:

需要说明的是,我是在方法on中处理这个问题的号码。原型,在那里我可以确定这总是一个数字对象。

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

Number.prototype.test = function()
    {
        console.log(this);
    }
var x = new Number(10);
x.test();
var foo = x.test;
foo();

当然会提供:

Number
DOMWindow

作为输出。你要决定是否要抵制它

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