javascript篇-----資料類型

來源:互聯網
上載者:User

標籤:locale   script   ons   center   另一個   字串包含   color   浮點   比較   

  ECMAScript中一共有6種資料類型,其中包括5種基礎資料型別 (Elementary Data Type)(Undefined,Null,Boolean,Number,String)以及一種複雜資料類型(Object)。【ES6增加多了一種Symbol資料類型,但這裡先不做討論】

Undefined類型

  Undefined類型只有一個undefined值。在使用var聲明變數但未對其加以初始化的時候,這個變數的值就會被自動的賦上undefined值。

1 {2     var name;3     console.log(name);    //undefined4 }
Null類型

  Null類型也同樣只用一個null值。null值在邏輯角度上代表一個Null 物件指標,所以使用typeof操作符檢測null值時會返回“object”。

1 {2     var dd = null;3     console.log(typeof dd);  4 }

  如果定義的變數準備在將來用於儲存對象,那麼最好將該變數初始化為null。這樣一來,只要直接檢查null值就可以知道相應的變數是否已經儲存了一個對象的引用。

Boolean類型

  Boolean類型有兩個字面值:true和false。這裡需要注意一下,Boolean類型的字面值true和false是區分大小寫。True和False都不算是Boolean的值,只能算是標識符。

  ECMAScript中所有資料類型值都能通過調用轉型函數Boolean()轉換為其相對應的Boolean值。

1 {2     var bool = 13;3     var _bool = Boolean(bool);4     console.log(_bool);    //true5 }

  調用轉換函式返回的值是true還是false,取決於要轉換的資料類型及其實際值。下表給出了各種資料類型及其相對應的轉換規則:

資料類型 轉換為true的值 轉換為false的值
Boolean true false
String 任何非Null 字元串 ""(Null 字元串)
Number 任何非零數字值(包括無窮大) 0和NaN
Object 任何對象 null
Undefined undefined
Number類型

  ECMAScript中的Number類型使用了IEEE754格式來表示整數和浮點數值,支援各種數實值型別。關於Number類型有幾點可以討論下。

浮點數值

  所謂浮點數值,就是該數值中必須包含一個小數點,並且小數點後面必須至少有以為數字。為了減小儲存數值的時的記憶體佔用(儲存浮點數值需要的記憶體空間是儲存整數值的兩倍),ECMAScript會儘可能的將浮點數值轉換為整數值。

1 {2     var float1 = 1.;    //小數點後沒有數字,解析為13     var float2 = 10.0    //整數,解析為104 }
數值範圍

  由於記憶體的限制,ECMAScript所能儲存的數值是有限的,其所能儲存的最小數值和最大數值分別儲存在Number.MIN_VALUE和Number.MAN_VALUE之中。在大多數的瀏覽器中,這兩個值分別是5e-324(科學技術法)和1.7976931348623157e+308。如果某次計算的結果超出了這個數值範圍,那麼這個數值就會被自動轉換成特殊的Infinity(正無窮)或者-Infinity(負無窮)。對Infinity和-Infinity的判斷可以通過使用isFinite()函數。這個函數在參數位於最小和最大數值之間時會返回true。

1 {2     var result1 = 121;3     var result2 = Number.MAX_VALUE + Number.MAX_VALUE;4     console.log(isFinite(result1));    //true5     console.log(isFinite(result2));    //false    6 }
NaN

  NaN,即非數值(Not a Number)是一個特殊的數值,這個數值用於表示一個本來要返回數值的操作但未返回數值的情況(這樣就不會拋出錯誤)。NaN本身具有兩個非同異常的特點。

    • 任何涉及NaN的操作都會返回NaN,這個特點在多步計算中有可能導致問題。
    • NaN與任何值都不相等,包括NaN自身。也就是說,NaN == NaN這條語句總是會返回false。

  針對NaN的這兩個特點,ECMAScript定義了isNaN()函數。這個函數接受一個參數,該參數可以是任何類型,而函數會幫我們確定這個參數是否“不是數值”。isNaN()在接收到一個值之後,會嘗試將這個值轉換為數值,任何不能被轉換為數值的值都會導致這個函數返回true。

1 {2     console.log(isNaN(NaN));    //true3     console.log(isNaN(100));    //false(100是一個數值)4     console.log(isNaN(‘100‘));    //false(可以轉換成數值100)5     console.log(isNaN(‘blue‘));    //true(不能轉換成數值)6     console.log(isNaN(false));    //false(可以轉換成數值1)7 }

  isNaN()也是適用於對象的,但是這裡不討論,下面+。

數值轉換

  Number()、parseInt()和parseFloat()這三個函數可以把非數值轉換為數值。第一個轉型函數Number()可以用於任何資料類型,而另外兩個函數則專門用於把字串轉換成數值。

  Number()函數的轉換規則如下。

    • 如果是Boolean值,true和false將分別被轉換為1和0。
    • 如果是數字值,只是簡單的傳入和返回。
    • 如果是null值,返回0。
    • 如果是undefined,返回NaN。
    • 如果是字串,遵循如下規則。
      • 如果字串中只包含數字,則將其轉換為十進位數值(前置的零會被忽略)。
      • 如果字串中包含有效浮點格式,則將其轉換為對應的浮點數值(前置的零會被忽略)。
      • 如果字串中包含有效十六進位格式,則將其轉換為相同大小的十進位整數值。
      • 如果字串是空的,則將其轉換為0。
      • 如果字串中包含出上述格式之外的字元,則將其轉換為NaN。
    • 如果是對象,則調用對象的valueOf()方法,然後依照前面的規則轉換返回的值。如果轉換的結果是NaN,則調用對象的toString()方法,然後再次依照前面的規則轉換返回的字串值。
1 {2     var num1 = Number(‘hello‘);        //轉換為NaN,不包含任何有意義的數字值3     var num2 = Number(‘‘);            //轉換為0,Null 字元串4     var num3 = Number(‘00101‘);        //轉換為101,忽略前置字元為零5     var num4 = Number(‘true‘);        //轉換為1,布爾值的轉換規則6     var num5 = Number(‘0012.3‘);    //轉換為12.3,忽略前置字元為零7 }

 

  相比較Number函數對字串複雜和不合理的轉換規則,parseInt()函數對字串的轉換則相對比較簡單和合理,所以更常用。parseInt()函數在轉換字串時,更多的是看其是否符合數值模式。它會忽略字串前面的空格,直至找到第一個非空白字元。如果第一個字元不是數字字元或者負號,parseInt()就會返回NaN。也就是說,用parseInt()轉換Null 字元串會返回NaN。如果第一個字元是數字字元,parseInt()會繼續解析第二個字元,直到解析完所有後續字元或者遇到了一個非數字字元。

1 {2     var num1 = parseInt(‘5656hello‘);        //56563     var num2 = parseInt(‘‘);                //NaN4     var num3 = parseInt(‘33.4‘);            //335     var num4 = parseInt(‘33‘);                //336 }

 

  可以為parseInt()提供第二個參數:轉換時使用的基數(即多少進位)。如果知道要解析的值是十六進位格式的字串,那麼可以指定基數16作為第二個參數。

1 {2     var num1 = parseInt(‘0xAf‘, 16);        //175,十六進位轉換3     var num2 = parseInt(‘AF‘, 16);            //175,傳入第二個參數時,十六進位的‘0x‘可以省略4     var num3 = parseInt(‘AF‘);                //NaN5 }

 

  與parseInt()函數類似,parseFloat()也是從第一個字元開始解析每個字元。而且也是一直解析到字串末尾,或者解析到遇見一個無效的浮點數字字元為止。也就是說,字串中的第一個小數點是有效,而第二個小數點就是無效的了,因此它後面的字串將被忽略。其次,如果字串包含的是一個可解析的為整數的數,parseFloat()會返回整數。

1 {2     var num1 = parseFloat(‘456red‘);        //456,解析為整數3     var num2 = parseFloat(‘22.5‘);            //22.54     var num2 = parseFloat(‘123.123.12‘);    //123.123,第一個小數點有效,第二個小數點無效5     var num3 = parseFloat(‘052.2‘);            //52.5,忽略前置字元為零6     var num3 = parseFloat(‘0.125e7‘);        //31250000,科學計數法7 }

 

String類型

  String類型用於表示由零或多個16位Unicode字元組成的字元序列,即字串。字串可以由雙引號(")或者單引號(‘)表示。

字元字面量

  String資料類型包含一些特殊的字元字面量,也叫逸出序列,用於表示非列印字元,或者具有其他用途的字元。逸出序列可以在出現在字串中的任意位置,而且也將被作為一個字元來解析。逸出序列有這些。

字面量 含義
\n 換行
\t 製表
\b 退格
\r 斷行符號
\f 進紙
\\ 斜杠
\‘ 單引號(‘),在用單引號表示的字串中使用。例如:‘He said,\‘hey.\‘‘
\" 單引號(‘),在用單引號表示的字串中使用。例如:‘He said,\"hey.\"‘
\xnn 以十六進位代碼nn表示的一個字元(其中n為0~F)。例如,\x41表示"A"
\unnnn 以十六進位代碼nnnn表示的一個Unicode字元(其中n為0~F)。例如,\u03a3表示希臘字元Σ

  任何字串的長度都可以通過訪問其length屬性取得。

1 {2     var text = ‘Some words.‘3     console.log(text.length);        //104 }

 

字串的特點

  ECMAScript中的字串是不可變的,字串一旦建立,他們的值就不能改變。要改變某個變數儲存的字串,首先要銷毀原來的字串,然後再用另一個包含新值的字串填充該變數。

1 {2     var text = ‘Some words‘;3     text = text + ‘for you.‘;         //將原text字串變數‘Some words‘和新建立字串值‘for you.‘串連,得到新的字串值‘Some words for you.‘,並將新的字串值填充text變數。4 }

 

轉換為字串

  有兩種方式能夠把一個值轉換為一個字串。

  第一種方式是使用幾乎每一個值都有的toString()方法(null和undefined只有這個方法)。這個方法會返回相應值的字串表現。

1 {2     var num = 11;3     var numToString = num.toString();            //‘11‘4     var bool = true;5     var boolToString = bool.toString();            //‘true‘6 }

 

  調用數值的toString()方法時,可以傳遞一個參數:輸出數值的技術。預設情況下,toString()方法以十進位格式返回數值的字串表示。而通過傳遞參數,toString()可以輸出二進位、八進位、十六進位、乃至其他任意有效進位格式表示的字串值。

1 {2     var num = 10;3     console.log(num.toString());            //‘10‘4     console.log(num.toString(2));            //‘1010‘5     console.log(num.toString(8));            //‘12‘6     console.log(num.toString(10));            //‘10‘7     console.log(num.toString(16));            //‘a‘8 }

 

  第二種方式能在任何類型值的情況下使用(包括null和undefined),就是調用轉型函數String()。

    • 如果值有toString()方法,則調用該方法(沒有參數)並返回相應的結果。
    • 如果值是null,則返回"null"。
    • 如果值是undefined,則返回"undefined"。
 1 { 2     var value1 = 10; 3     var value2 = true; 4     var value3 = null; 5     var value4; 6     console.log(String(value1));        //‘10‘ 7     console.log(String(value2));        //‘true‘ 8     console.log(String(value3));        //‘null‘ 9     console.log(String(value4));        //‘undefined‘,value4未賦值所以是undefined10 }
Object類型

  ECMAScript中的對象其實就是一組資料和功能的集合。對象可以通過執行new操作符後跟要建立的物件類型的名稱來建立。而建立Object類型的執行個體並為其添加屬性和方法,就可以建立自訂對象。

1 {2     var o = new Object();3     o.name = ‘myname‘;4 }

 

 

  在ECMAScript中,Object類型是所有它的實力的基礎。換句話說,Object類型所具有的任何屬性和方法也同樣存在於更具體的對象中。因此,每個執行個體都具有下面的屬性和方法。

    • constructor:儲存著用於建立當前對象的函數,又稱建構函式。對於前面的物件變數o而言,建構函式就是Object()。
    • hasOwnProperty(propertyName):用於檢查給定的屬性在當前對象執行個體中(而不是在執行個體的原型中)是否存在。其中,作為參數的屬性名稱(propertyName)必須以字串形式指定。
    • isPropertyOf(object):用於檢查傳入的對象是否是當前對象的原型。
    • propertyIsEnumerable(propertyName):用於檢查給定的屬性是否能夠使用for-in語句來枚舉。
    • toLocaleString():返回對象的字串表示,該字串與執行環境的地區對應。
    • toString():返回對象的字串表示。
    • valueOf():返回對象的字串、數值或布爾值表示。通常和toString()方法的傳回值相同。

javascript篇-----資料類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.