JavaScript 資料型別和值
程式是通過操作值來執行的。用來表示並操作的值的型別成為資料型別。JavaScript包括三種基本資料型別——數字、文字字串和布林值,還支援兩種小資料型別null(空)和undefined(未定義)。
此外,JavaScript還支援符合資料型別——物件。物件是值的集合。有序集合(陣列)、函式(function)和已命名的無序集合都是物件。除此之外,JavaScript還定義了一些專用物件類(class),如表示日期的Date物件類,表示正則表示式的RegExp物件類,表示語法和執行時錯誤的Error物件類。
數字:
JavaScript不同於其他語言的一個特點是它不區分整型數值和浮點型數值,所有的數字都由浮點型表示。它採用IEEE754標準定義的64位浮點格式表示數字。
JavaScript支援十進位制、十六進位制和八進位制數值直接量。需要注意的是ECMAScript標準不支援八進位制直接量,而且不是所有的JavaScript都支援八進位制數值,所以在程式中要儘量避免八進位制直接量的使用。
在JavaScript中採用了大量的算術函式,來支援複雜的算術運算,這些函式都被儲存在Math物件中,作為Math物件的屬性使用。
---------------------------------------------------------------------------------------------
Math物件——核心參考手冊和其後列表
數字的 toString()方法:toString()方法可以用它的引數指定的基數或底數(底數必須在2和36之間)把數字轉換成字串。
---------------------------------------------------------------------------------------------
JavaScript中還定義了一些特殊的數值來表達特殊情況下的資料的值。
Infinity 表示無窮大的特殊值
NaN 特殊的非數字值
Number.MAX_VALUE 可表示的最大數字
Number.MIN_VALUE 可表示的最小數字(與零最接近的數字)
Number.NaN 特殊的非數字值
Number.POSITIVE_INFINITY 表示正無窮大的特殊值
Number.NEGATIVE_INFINITY 表示負無窮大的特殊值
JavaScript還定義了函式isNaN()用來檢測NaN值,isFinite()來檢測一個數字是否是Nan、或正無窮大或負無窮大。
字串:
JavaScript中的字串包含在單引號或雙引號中,在JavaScript中沒有char字元型別,而是用長度為1的字串來表示字元。
在JavaScript中,我們還可以使用轉義序列把Unicode字元新增到字串直接量中,這對於不支援完整Unicode字符集的地方非常有用。
我們在使用字串的時候,可能會遇到字串本身包含了單引號或雙引號的情況,這是就需要用到JavaScript中定義的轉義字元加單引號或雙引號來表示,如“/'”或“/"”。JavaScript的轉義序列有:
/0 NUL字元(/u0000)
/b 退格符(/u0008)
/t 水平製表符(/u0009)
/n 換行符(/u000A)
/v 垂直製表符(/u000B)
/f 換頁符(/u000C)
/r 回車符(/u000D)
/" 雙引號(/u0022)
/' 單引號或撇號(/u0027)
// 反斜槓(/u005C)
/xXX 由兩位十六進位制數值XX指定的Latin-1字元
/uXXXX 由四位十六進位制數XXXX指定的Unicode字元
/XXX 由一位到三位八進位制數(1到377)指定的Latin-1字元。ECMAScript不支援。
同Java語言一樣,JavaScript用(+)號連線多個字串。
JavaScript的字串和陣列一樣從0開始索引。
------------------------------------------------------------------------------------------------------------------------------------------------
對字串的屬性和方法,length、charAt()、substring()、indexOf()等,參考核心參考手冊的String物件和其後列表
------------------------------------------------------------------------------------------------------------------------------------------------
布林值:
true和false,常用於JavaScript的控制結構。
函式:
函式(function)是一個可執行的JavaScript程式碼段,包括使用者自定義函式和JavaScript預定義函式。
JavaScript函式相對於其它語言的一個重要特性是,JavaScript中的函式是一個真正的資料型別,這就意味著函式可以被儲存在變數、陣列和物件中,還可以作為引數傳遞個其它函式。
我們在定義函式時,除了用傳統的:
function name(param,){ …… }
還可以用JavaScript特有的函式直接量的方法,這在某些高階指令碼中非常有用:
var name = function(param,){ …… }
物件:
有著面嚮物件語言基礎的程式設計師來說,一定知道物件就是資料的集合。JavaScript中的物件,其屬性包括了儲存在其中的變數和函式方法。這些屬性都可以通過物件來呼叫(非常類似於Java)。
JavaScript中的物件可以作為關聯陣列使用,因為它們能夠將任意的資料值和任意的字串關聯起來。如果採用這種方式使用物件,訪問物件的方法要使用一個由方括號封閉起來的、包含所需屬性名的字串。如訪問image物件的width和height屬性:iamge["width"];image["height"]
ECMAScript v3定義了物件直接量的語法,使你能夠建立物件並定義它的屬性。物件直接量由一個由花括號中的列表構成,這個列表的元素是用冒號分隔的屬性/值對,元素之間用逗號隔開。
如定義一個point物件:
var point={x:2.3,y=1.3}
物件直接量也可以巢狀,如:
var rectangle = {upperleft:{x:2,y:2},lowerright:{x:4,y:4}}
其中屬性值不必是常量,也可以是任意的JavaScript表示式。
陣列:
JavaScript中,要獲得陣列中的值,可以使用陣列名,加上用方括號封閉起來的下標值。陣列的下標從0開始。(這些都和Java陣列一樣)陣列可以存放任何一種JavaScript資料型別,包括其它陣列、物件或函式的引用。由於JavaScript是一種無型別語言,因此陣列元素不必具有相同的資料型別。
陣列的建立方法如下:
var a = new Array();
a[0] = 1.2;
a[1] = "JavaScript";
a[2] = true;
a[3] = {x:1,y:3};
var b = new Array(1.2,"JavaScript",true,{x:1,y:3});
var c = new Array(4);
陣列直接量的定義與物件直接量定義類似,也可以巢狀,其屬性值不必是常量:
var d = [1.2,"JavaScript",true,{x:1,y:3}];
而且陣列直接量中還可以存放未定義的元素:
var e = [1,,,,5];