2017-10-17 87 views
2
var a = 10 
var b = new Number(10) 

console.log(a instanceof Number) 
console.log(b instanceof Number) 

任何人都可以让我知道上面两个声明和a和b的定义有什么区别。Var和新的区别

+1

也许这篇文章可以帮助解释[**新的Number()**(https://stackoverflow.com/questions/2381399/what - 这是新的数字和数字在JavaScript之间的差异)其他我相信会明白你的理解'新数字()' – NewToJS

+1

可能重复[字符串之间有什么区别JavaScript中的文字和String对象?](https:// stackoverflow。com/questions/17256182/what-is-the-difference-between-string-literals-and-string-objects-in-javascript) – Chang

+1

题目很差,'a'和'b'都是'var' –

回答

0

第一个声明就像原始数据类型。

虽然在您使用new Number(10)的第二个声明中,它被认为是一个包装函数或class来将您的编号保存在object中。

要看到实际的区别,现在检查的实际类型的变量,在这两种情况下:

console.log(typeof(a)) //should give you "number" 
console.log(typeof(b)) //should give you "object" 
0

var关键字是可变的只是一个简单的声明。 new关键字用于生成某种类型的新的object。为了充分理解它们,您需要在编程中查看对象。

1

明确指出您正在创建一个新号码,new Number(10)会为该号码创建一个新的wrapper object,而将一个数字定义为变量会创建一个integer primitive value。这样,你就会得到检查他们typeof时不同的结果:

var a = 10; 
 
var b = new Number(10); 
 

 
console.log(typeof a); 
 
console.log(typeof b);

希望这有助于! :)

+0

很确定它创建了一个数字原始值...其余的似乎是正确的。 – Shadow

+1

哎呀,我的部分略有疏忽:P修正:) –

+0

感谢兄弟的澄清,但是当我们声明var a = 10时,我们发现了一些针对变量但没有构造函数的方法。所以你可以解释一下,因为在JavaScript中没有整数概念,并且JavaScript数字总是以双精度浮点数的形式存储。 –

1

第一个创建一个原语。另一个对象。

为Number对象的主要用途是:

1)如果参数不能被转换成一个数字,它返回NaN。

2)在非构造函数上下文中(即没有new运算符),Number可用于执行类型转换。

reference

在理论上是有区别的,但在实践中没有。当JavaScript需要成为一个对象时,JavaScript引擎会自动将一个基元放入一个对象中。

var number = 42; 
// calling .toFixed will 'box' the primitive into a number object, 
// run the method and then 'unbox' it back to a primitive 
console.log(number.toFixed(2)); 

我发现的唯一用法是如果你想从构造函数返回一个基元。

function Foo() { 
    return 42; 
} 

var foo = new Foo(); 
console.log(foo); // foo is instance of Foo 

function Bar() { 
    return new Number(42); 
} 

var bar = new Bar(); 
console.log(bar); // bar is instance of Number 

提醒

new Number(10) == new Number(10) return false 

enter image description here

相关问题