javascript應該注意的小case–資料類型

來源:互聯網
上載者:User

 

js的資料類型:Number、String、Boolean、Undefined、Null和Object。我們在js裡建立的資料一定是以上幾種類型的一種。

 

1,typeof操作符

js提供了typeof操作符來檢測資料的類型,但是typeof操作的結果只會是:number,string,boolean,undefined,object,function中的一個,這個和提供的資料類型是不一致的。

 

2,undefined類型

如果一個變數聲明未賦值之前,它是undefined類型,並且有值是undefined。

要注意的是:如果我們對從未聲明過的變數,它也是undefined類型,但是對它進行取值的操作將會產生一個變數未定義的錯誤。

var message;alert(typeof message);  //  undefinedalert(message);//  undefined//var message2;alert(typeof message2);//  undefinedalert(message2);//  錯誤

 

3,Null類型

null值表示一個Null 物件指標,它也只有一個值null。

alert(typeof null);  //  objectalert(null);    // null

 

另外要注意的undefined值是派生自null值的,就有以下的結果:

alert(undefined == null);   // true

 

儘管如此,但他們兩個的作用完全是不一樣的,因此我們如果確定一個變數要指向對象,還沒有真正指向對象之前,應該在聲明它暫時賦值為null。

 

4,Boolean類型

只有兩個值ture,false,並且是區分大小寫,也就是說var isError = False;將產生錯誤。

js提供了一個Boolean(arg)的函數來將其它類型轉為Boolean類型,更有意思也值得注意的特性是js會為流程式控制制語句(如if)自動調用Boolean類型的轉換。

轉型的規則如下:

Boolean的flase,String類型的“”,Number類型的0和NaN,Object類型的null,undefined類型的undefined會被認為是false,其它都是true。

 

5,Number類型

可用來表示分為整數和浮點數,整數又包括八進位(0開頭)、十進位(預設)和十六進位(0x開頭)。

其中八進位如果有某位超過了7,前面的0將被忽略,被認為是十進位。如070轉為十進位是56,而018會認為是18。

   
浮點數值儲存空間是整數的兩倍,js會把如1.0、10.這樣的數值用轉為整數來儲存。
要注意的是,盡量不要用基於js浮點數值運算:

alert(0.1 + 0.2);  //  輸出是0.30000000000000004

 

另外有幾個特殊的值要注意:

Number.MAX_VALUE、Number.MIN_VALUE儲存的是所能支援的最大、最小的數,如果超過這個範圍將會得到正無窮Infinity、負無窮-Infinity。我們可以用isFinite()函數來判斷一個數是不是超出了範圍。其中我們可以從Number.NEGATIVE_INFINITY、Number.POSITIVE_INFINITY得到正無窮Infinity、負無窮-Infinity。

 

另外還有一個要注意的值NaN,任何一個需要返回數值的運算返回的不是數值將返回NaN,它是一個特殊數值,跟任何數值的任何運算都會返回NaN,並且它不與任何值相等包括自己。
另外有isNaN()函數,來判斷傳入的任意型別參數是不是NaN。isNaN會對參數進行轉化,如果能轉化為數值,就返回false.這上轉化是對整體的一個轉化,還會把true轉為1,false轉為0.如果參數是對象,它會先調用對象的valueOf(),如果不能轉為數值,會再次調用toString()來判斷。

alert(isNaN("1234asdf")); // truealert(isNaN(0070));       // falsealert(isNaN("00070"));    // falsealert(isNaN(0x70));       // falsealert(isNaN("0x70"));     // falsealert(isNaN(false));      // falsealert(isNaN(""));         // falsealert(isNaN(NaN));        // true

       
6,數值轉換:Number(),parseInt(),parseFloat()
Number()可以對任何類型的參數進行轉換,轉換規則如下:
    Boolean類型true轉為1,false轉為0;

    Number類型,直接返回;

    undefined返回NaN;

    String類型,Null 字元串轉為0,數實值型別的字串會忽略所有前置的0轉為相應的整型或浮點型,因此八進位將會被忽略,如果是ox開頭的數字字串,將按十六進位數處理轉為相對應的十進位數,其它轉為NaN;

    object類型,null返回0,其它會調用該對象的valueOf()對其傳回值操作,如果返回NaN,再調用其toString()方法,測定傳回值。

alert(Number("1234asdf"));  //  NaNalert(Number("00070"));     //  70alert(Number("false"));     //  0alert(Number(""));          //  0

 

parseInt()和parseFloat只對字串參數操作。

parseInt()的轉化規則:

     它會忽略前面所有的空格,從第一個不是空格的字元開始轉化,如果這個字元不是數字或者負號,將返回NaN;或者繼續轉化下一位置,直到下一個不是數位位置或者結束位置。這樣如“1234abcd”將返回1234,“”返回NaN,”12.3“返回12。

alert(parseInt("1234abcd"));   //   1234alert(parseInt("")); //  NaNalert(parseInt("12.34"));// 12

 

與Number()不同的是,parseInt()能識別出八進位、十六進位的數值進行對應的轉化,但是在瀏覽器的實現上卻出現了問題,IE中會把070轉為70,而ff,chrome把070轉為56。前面多個0時,相當於只有一個0。

alert(parseInt("070"));  //  ie彈出70,ff,chrome彈出56

 

不過幸好javascript提供了另一個參數來決定要何種(2/8/10/16)進位數來處理。

alert(parseInt("070","8"));  //  都彈出56

   

parseFloat()與parseInt()類似,也會逐個檢查字元,直到不是數值的字元或第二個小數點出現。

alert(parseFloat("1234abcd")); //  1234alert(parseFloat(""));         //  NaNalert(parseFloat("12.34"));    //  12alert(parseFloat("12.34.22")); //  12.34alert(parseFloat("0x23"));     //  0alert(parseFloat("0323"));     //  323

 

 

6,String類型

幾乎所有的類型(null和undefined除外)都會有一個tostring()的方法,把自身轉為字串類型。

 

另外,數值型的toString()還可以接受一個參數(2/8/10/16),來決定按何種進位表示的字串值。

對於null和undefined調用toString()將產生錯誤,如果不確定要轉換值是不是null/undefined,可以調用String()來轉換,它會把null轉為”null“,undefined轉化為"undefined",其它與toString()一樣。


 

7,Object類型
此類型是一組資料和功能的集合,我們可以var o = new Object();或var o = {};來建立對象。
   

每個object執行個體都有一些方法/屬性:
    constructor屬性:用來儲存建立當前對象的方法。
    hasOwnProperty(name):可用於檢測當前對象的執行個體是否有某個屬性。
    isPrototypeOf(object):用於檢測傳入的對象是不是另一對象的原型。
    propertyIsEnumerable(name):用於檢測對象的這個屬性是不是可以用for-in來枚舉。
    toString():返回對象的字串表示。
    valueof():返回對象的字串、布爾或數值表示。通常與toString()傳回值一樣。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.