2017-10-17 122 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

相關問題