js中聲明Number的五種方式


轉載自: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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM