Javascript以不同的方式声明数字
Javascript declaring number in different ways?
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;
您可以使用分隔符_
,以获得苦涩的可读性
- Javascript以不同的方式声明数字
- 如何获得一个与用“”声明的变量工作方式相同的变量;设“;或在with块中
- 有人可以解释一下这个变量的声明方式
- 什么'It是声明对象的最佳方式
- Dojo:用Options以声明方式定义类似Select的小部件
- 如何以正确的方式在jQuery中声明变量
- 这个 getter-setter 闭包是否有充分的理由以这种方式在其内部对象中声明它是私有的
- 以编程方式声明基于索引数组的变量(使用谷歌网站列表页面)
- javascript对象声明没有按我希望的方式工作
- 命名函数的声明方式是否重要
- 什么'声明和获取js对象的最佳方式是什么?(模式)
- 在单个网页上一次显示一个调查声明的有效方式
- Jquery与HTML5数据的声明方式-*
- 什么'It是声明字符串的最佳方式
- 为什么函数声明在不同的浏览器中处理方式不同
- Javascript变量声明的不同方式
- 链接(重定向)以隐身方式打开,或在新选项卡中打开,或显式声明了新页面.刚点击时不工作
- 在不重复代码的情况下,为不同的Dojo版本以不同的方式声明类
- 以更简洁的方式声明javascript静态方法
- 是否可以以外部作用域不可见的方式声明/调用函数