当前位置:  开发笔记 > 编程语言 > 正文

为什么不使用Number作为构造函数?

如何解决《为什么不使用Number作为构造函数?》经验,为你挑选了3个好方法。

我在JSLint中输入了这个语句:

var number = new Number(3);

并收到以下消息:

不要使用Number作为构造函数.

这是为什么?该语句正在创建一个数字对象,而不是原始值,所以我不明白为什么使用new是一个问题.

编辑:感谢所有的回复.他们让我进一步思考,所以我在这里发布了一个后续问题.



1> Matthew Crum..:

除了断开===和typeof返回"对象"之外,使用Number构造函数还会更改在布尔上下文中使用该值的方式.由于"new Number(0)"是一个对象,而不是文字值,因此它的计算结果为"true",因为它不是null.例如:

var n1 = 0;
var n2 = new Number(0);

n1 == n2  // true
n1 === n2 // false
if (n1) {
    // Doesn't execute
}
if (n2) {
    // Does execute, because n2 is an object that is not null
}

编辑:甚至比在数字文字和数字对象之间断开===更糟糕,==甚至不能在两个数字对象之间工作(至少不是以直观的方式 - 他们测试身份,而不是相等).

var n1 = new Number(3);
var n2 = new Number(3);

alert(n1 == n2); // false
alert(n1 === n2); // false


我不认为应该不鼓励使用`Number`作为构造函数.开发人员只需要知道构造函数总是返回一个对象,以及如何使用它,而不是反对它.

2> Ates Goral..:
var number = new Number(3);
alert(typeof number); // gives "object"

使变量number具有某种类型Object可能不是最理想的结果.鉴于:

var number = Number(3);
alert(typeof number); // gives "number"



3> Steven Huwig..:

new Number()不返回与数字文字相同的对象.这意味着使用新的Number()break ===,这是检查Javascript中完全相等的最佳方法.

>>> 3 == 1 + 2
true
>>> 3 === 1 + 2
true
>>> new Number(3) == 1 + 2
true
>>> new Number(3) === 1 + 2
false

您可以在附录C 的作者书籍JavaScript:The Good Parts中找到JSLint行为的基本原理.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有