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

发布于 2024-12-11 12:38:47 字数 430 浏览 1 评论 0原文

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 function

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

valueOf method

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

Which is the preferred option? Are there benefits to using one over the other?

For the record, I'm dealing with this within a method on Number.prototype, where I can be sure that this is always a Number object.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

戏蝶舞 2024-12-18 12:38:47

我认为 valueOf 是首选,因为 Number 转换旨在与还不是 Number 对象的值一起使用,但此外 - < code>Number(x) 将调用 x 上的 valueOf 方法,
因此本质上,您会添加不必要的糖/开销,其中 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

作为输出。由您决定是否要防御它。

I would think the valueOf is preferred, since Number conversion is meant to be used with values that are not already Number objects, but moreover - Number(x) will call valueOf method on x,
so essentially, you'd add an unnecessary sugar/overhead, where valueOf is a perfectly accepted way of receiving a primitive representation of an object (Number in your case).

As a side note:

For the record, I'm dealing with this within a method on
Number.prototype, where I can be sure that this is always a Number
object.

this is not correct as there is always a possibility that someone will do something like this:

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

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

var foo = x.test;
foo();

would of course provide:

Number
DOMWindow

as output. It's for you to decide whether you want to defend against it.

未蓝澄海的烟 2024-12-18 12:38:47

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

Why are you using Number objects? I think you are just making life difficult. To convert a Number object to a number primitive you can use the '+' operator:

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

For fun:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文