犀牛書第3章 JavaScript資料類型和值(上篇)

來源:互聯網
上載者:User

JavaScript支援5種基礎資料型別 (Elementary Data Type)

number 數字類型
string 字串
boolean true/false
null
undefined 未定義

除了這些基礎資料型別 (Elementary Data Type),JavaScript還支援複合資料型別---對象。一個對象表示的是值的集合。JavaScript中的對象有兩種:一種表示的是已命名的值的無序集合(一般對象),另一種表示的是有編號的值的有序集合(數組)。雖然在本質上來說,JavaScript中的對象和數組是同一種資料類型,但是它們的行為卻極為不同,所以通常將它們看成兩種不同的類型。

JavaScript還定義了另一種特殊的對象---函數。函數是具有可執行代碼的對象,可以通過調用函數執行某些操作。和數組一樣,函數的行為與其他類型的對象不同,JavaScript為函數定義了專用的文法。因此我們將函數看作獨立於對象和數組的資料類型。

除了函數和數組外,核心JavaScript語言還定義了其他一些專用的對象。這些對象表示的不是新的資料類型,而是對象的新的類。Date類定義的是表示日期的對象,RegExp類定義的是表示Regex的對象......等等。

1. 數字

數字是最基本的資料類型,它們幾乎無需解釋。JavaScript和其他程式設計語言(如C和Java)的不同之處在於它並不區別整型數值和浮點型數值。在JavaScript中,所有的數字都是由浮點型表示的。當一個數字直接出現在JavaScript程式中,我們稱它為數值直接量。JavaScript使用語言自身提供的算術運算子來進行數字運算,不僅如此,它還採用了大量的算術函數,來支援更為複雜的算術運算,這些函數是語言核心的一部分。為了方便,這些函數都被儲存為Math對象的屬性,因此我們總是使用直接量名Math來訪問這些函數。

JavaScript還使用了一些特殊的數值。當一個浮點值大於所能表示的最大值時,其結果是一個特殊的無窮大值,JavaScript將它輸出為Infinity。同樣地,當一個負值比所能表示的最小的負值還小時,結果就是負無窮大,輸出為-Infinity

當一個算術運算(如用0來除0)產生了未定義的結果或錯誤時,就會返回另一個特殊的JavaScript數值,在這種情況下,結果是一個非數位特殊值,輸出為NaN。這個非數字值的行為有些不尋常,因為它和任何數值都不相等,包括它自己在內,所以需要一個專門的函數isNaN( )來檢測這個值。相關的函數isFinite( )用來檢測一個數字是否是NaN,正無窮大或負無窮大。

特殊數值的常量
常量 含義
Infinity 無窮大
NaN 非數字
Number.MAX_VALUE 可表示的最大數字
Number.MIN_VALUE 可表示的最小數字
Number.NaN 非數字
Number.POSITIVE_INFINITY 正無窮大
Number.NEGATIVE_INFINITY 負無窮大

2. 字串

字串是用來表示文本的資料類型,程式中的字串直接量是包含在單引號或雙引號中的。注意JavaScript中沒有char這樣的字元資料類型。

字串直接量

字串直接量必須寫在一行中,如果將它們放在兩行,可能會將它們截斷。如果必須在字串直接量中添加一個分行符號,可以使用字元序列\n。如“this string \nhas two lines”。注意當使用單引號來界定字串時,必須留意英文的縮寫和所有格,如can't和O'reilly's。由於撇號和單引號相同,所以必須使用反斜線符號(\)來轉義帶有單引號的字串中出現的撇號。

字串直接量中的逸出序列

在JavaScript的字串中,反斜線(\)具有特殊的用途。在反斜線後加一個字元就可以表示字串中無法出現的字元了。例如\n是一個逸出序列,它表示的是一個分行符號。

JavaScript的逸出序列
序列 所代表的字元
\0 NULL
\b 退格符
\t 水平定位字元
\n 分行符號
\v 垂直定位字元
\f 換頁符
\r 斷行符號符
\" 雙引號
\' 單引號或撇號
\\ 反斜線符
\xXX 由兩位16進位數值XX指定的Latin-1字元
\uXXXX 由四位16進位數XXXX指定的Unicode字元
\XXX ECMAScript v3不支援,不要使用這種逸出序列

字串的使用

JavaScript的內部特性之一就是能夠連接字串。如果將加號(+)運算子用於數字,那麼它將把兩個數字相加。但是如果將它作用於字串,它就會把這兩個字串串連起來,將第二個字串附加在第一個之後。要確定一個字串的長度(它所包含的字元數),可以使用字串的length屬性。如果要獲得字串s的最後一個字元:

last_char=s.charAt(s.length-1);

在字串s中尋找第一個字母“a”的位置:

i=s.indexOf('a');

操作字串的方法還有很多,這裡不一一贅述。

把數字轉換為字串

將數字轉換為字串常用的方法有三種:

①要把一個數字轉換為一個字串,只要給它添加一個空的字串即可:

var n_as_string=n+" ";

②要讓數字更加顯式地轉換為字串,可以使用String( )函數:

var string_value=String(number);

③使用toString( )方法:

var string_value=number.toString( );

Number對象的toString( )方法有一個可選的參數,該參數用來指定轉換的基數。如果不指定這個參數,預設會以10為基數進行轉換。

 var n=17;binary_string=n.toString(2);  //"10001"octal_string="0"+n.toString(8);  //"021"hex_string="0x"+n.toString(16);  //"0x11"

JavaScript 1.5以前的版本的一個缺點就是:沒有內建的方法來把一個數字轉換為字串並且指定其中所包含的小數點的位置,或者指定是否應該使用指數標記法。這使得很難顯示一些傳統格式的數字,如表示貨幣值的數字。

ECMAScript v3和JavaScript 1.5通過為Number類增加了3個新的方法解決了這一問題。

①toFixed( )方法把一個數字轉換為字串,並且顯示小數點後的指定的位元,它不使用指數標記法。

var n=123456.789;n.toFixed(0);  //"123457"n.toFixed(2);  //"123456.79"

②toExponential( )使用指數標記法把一個數字轉換為字串,小數點前面為1位元,後年有指定的位元:

var n=123456.789;n.toExponential(1);  //"1.2e+5"n.toExponential(3);  //"1.235e+5"

③toPrecision( )使用指定的有意義的位元(有效數字)來顯示一個數字,如果有效數位位元還不夠顯示數位整個整數部分,它就使用指數標記法。

var n=123456.789;n.toPrecision(4);  //"1.235e+5"n.toPrecision(7);  //"123456.8"

把字串轉換為數字

把字串轉換為數字常用的方法有三種:

①當一個字串用於數字環境中,它會自動地轉換為一個數字。所以只要把一個字串減去0就可以將其轉換為一個數字。

var number=string_value-0;

②調用Number( )建構函式

var number=Number(string_value);

③調用parseInt( )或parseFloat( )

parseInt("3 blind mice");  //3parseFloat("3.14 meters");  //3.14

3. 布爾值

布林值資料型別只有兩個值true和false。在JavaScript中,布爾值很容易轉換,從其他類型轉換為布爾值也較容易,而且往往是自動轉換的。

如果一個布爾值用在數值環境中,true就轉換為數字1,而false就轉換為數字0。

如果一個布爾值用在一個字串環境中,true就轉換為字串"true",而false就轉換為字串"flase"。

如果一個數字用在一個本該布爾值的地方,那麼如果這個數字是0或NaN,它就會轉換為false,否則就轉換為true。

如果字串用在本該用布爾值的地方,那麼空串會被轉換為false,否則就轉換為true。

null或undefined也會轉換為false,而任何的非Null 物件、數組或函數都轉換為true。

如果讀者喜歡讓類型轉換成為顯式的,可以使用Boolean( )函數:var x_as_boolean=Boolean(x);

4. null

null表示“無值”。如果一個變數的值為null,那麼就說明它的值不是有效對象、數組、數字、字串和布爾值。

①當null用於布爾環境,它轉換為false。

②當null用於數字環境,它轉換為0。

③當null用於一個字串環境,它轉換為“null”。

5. undefined

在使用了一個並未聲明的變數時,或者使用了已經聲明但還沒有賦值的變數時,又或者使用了一個並不存在的對象屬性時,返回的就是undefined。

①當undefined用於布爾環境,它會轉換為false。

②當undefined用於數字環境,它會轉換為NaN。

③當undefined用於字串環境時,它會轉換為"undefined"。

相關文章

聯繫我們

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