轉載自:http://www.jb51.net/article/34191.htm
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js中聲明Number的五種方式</title> 6 </head> 7 <body> 8 <script> 9 /* 10 方式一:最常見的方式,通過數字字面量方式聲明 11 var num = 123; 12 1.解析變量的值,比如說取出整數部分、小數部分等,因為數字聲明方式還可以為num = .123,num = 123e4等形式 13 2.對解析出來的值取近似值,比如num = 123.33333333333333...3333333333333333333333333...., 14 這個時候就要取近似值了,具體取近似則規則不展開 15 3.此種方式聲明的變量,只是個簡單的數字字面量,並不是對象(至於為什么可以在上面調用toString等方法,后文講解) 16 17 方式二:偶爾使用方式,大部分情況下是將字符串轉成數字 18 var num = Number(123); 19 1.此處只是將Number當作一個普通的函數來調用,而不是構造方法,因此返回的不是對象,而是一個簡單的數值 20 2.本質與方式一相同;相對於方式一的區別在於,需要針對傳入參數的類型,執行不同的類型轉換過程,試圖將參數解析成對應的數值 21 22 方式三:很少使用,各神書,包括犀牛書,都將其列入不推薦方式 23 var num = new Number(123); 24 1.此處將Number作用構造方法調用,返回的是Number類型的對象,該對象能夠訪問Number的原型屬性以及方法; 25 這樣說可能有些迷惑,后面會說到 26 27 */ 28 var num = new Number(123); 29 console.log(typeof num); //輸出:object 30 console.log(Object.prototype.toString.call(num)); //輸出:[object Number] 31 /* 32 3.返回的Number類型對象內部的原始值( [[PrimitiveValue]]),為經過類型轉換后獲得的數字值,具體轉換規則與方式二提到的一致 33 34 方式四:神方式,目前還沒見過人使用 35 var num = new Object(123); 36 1.傳遞了參數,且參數是一個數字,則創建並返回一個Number類型的對象 —— 沒錯,其實等同於方式三 37 2.該Number對象的值等於傳入的參數,內部的[[prototype]]屬性指向Number.prototype 38 39 方式五:更離奇,更詭異 40 var num = Object(123); 41 1.當傳入的參數為空、undefined或null時,等同於 new Object(param),param為用戶傳入的參數 42 2.否則,返回一個對象,至於具體轉換成的對象類型,可參見下表;具體到上面的例子,本質等同於new Number(123): 43 */ 44 /* 45 * 不是說字面量方式聲明的只是普通的數值類型,不是對象嗎?但不是對象哪來的toString方法調用? 46 * 當用戶通過字面量方式聲明一個變量,並在該變量上調用如toString等方法,JS腳本引擎會偷偷地創建該變量對應的包裝對象, 47 * 並在該對象上調用對應的方法; 48 * 當調用結束,則銷毀該對象;這個過程對於用戶來說是不可見的 49 */ 50 </script> 51 </body> 52 </html>