Javascript以不同的方式声明数字

Javascript declaring number in different ways?

本文关键字:方式 声明 数字 Javascript      更新时间:2023-09-26
var a = 1;
var b = Number(1);
var c = new Number(1);

我想知道这三个陈述之间有什么区别。我知道第一个和第二个语句是相同的,因为if(a===b)给出了true,但是第三个语句将创建一个类型为数字的对象。

我想知道的是这些方法有何不同,其中一种会比另一种具有任何优势?

1这样的值是基元,而不是对象。JavaScript 通常会在必要时将数字提升为Number对象。 很少有理由明确地构建一个,当然也没有特别的"优势"。也没有理由像Number(1)这样的东西,尽管Number构造函数是强制值为数字的几种方法之一。

简而言之,non:如果你想为自己省去一个麻烦的世界,new String()new Number()构造函数将被忽略。
您在此处介绍的前两种方法为变量分配一个数值常量,第三种方法(如您所说(创建一个对象。该对象的值将1 ,但您可以更改该值,而不会丢失为该对象设置的任何特定方法。

在对象中存储数字或字符串没有太多优点。AFAIK,您唯一"获得">的是调用某些方法(如toExponential等(时常量的性能差异非常小......
在我看来,不值得为您必须使用的所有数字创建对象。我认为它是JS的坏部分之一,旨在使Java小程序开发人员看起来熟悉该语言。

第二个,没有 new 关键字,允许您排序类型转换:Number(document.getElementById('formElem').value) === 123; 并有其用途(根据我的经验,主要是 Date 对象(。但话又说回来,转换为数字也可以使用 + 运算符来实现:+document.getElementById('formElem').value) === 123

总的来说,只要远离这些原始构造函数即可。它们仍然存在的唯一原因是因为它们是对象,因此有原型。现在这是一个优势:

Number.prototype.addOneToString = function()
{
    return (1+this).toString();
};
String.prototype.UpperFirst = function()
{
    return this.charAt(0).toUpperCase() + this.slice(1);
}
var foo = new Number(3);
foo.addOneToString();//returns "4"
foo = new String('foo');
foo.UpperFirst();//Foo

由于 JS 将常量操作数包装在其对象对应项的实例中,因此当语句需要它时,您可以将原型方法(本机或自制方法(应用于任何常量。(感谢 Pointy 为此,以及 +1(

(3).addOneToString();//"4"
'foo'.UpperFirst();//Foo

因此,只需将它们视为遗留怪癖,由于它们的原型而仍然存在。

在 ES12 及之后,您可以使用以下方法来声明大数字。

const oneMillion = 1_000_000;
var oneMillion1 = 1_000_000;

您可以使用分隔符_ ,以获得苦涩的可读性