1.ECMAScript數據類型 5種簡單數據類型,分別是: Undefined Null Boolean Number String 1種複雜數據類型: Object (1)typeof操作符——檢測給定變數的數據類型 “undefined”——未定義 “booleam”——布爾值 “string ...
1.ECMAScript數據類型
5種簡單數據類型,分別是:
Undefined
Null
Boolean
Number
String
1種複雜數據類型:
Object
(1)typeof操作符——檢測給定變數的數據類型
“undefined”——未定義
“booleam”——布爾值
“string”——字元串
“number”——數值
“object”——對象或是null
“function”——函數
eg:
1 <script type="text/javascript"> 2 var m="hello!" 3 alert(typeof(m)); 4 alert(typeof m); 5 alert(typeof 93); 6 </script>
出現3個提示框,分別是:
註意:(1)以上例子說明,typeof操作符的操作數可以是變數,也可以是數值字面量。
typeof是一個操作符,而不是一個函數,所以例子中的圓括弧可以使用,但不是必需的。
(2)調用 typeof null返回的是 “Object” ,因為特殊值null被認為是空的對象引用。
2.Undefined類型
undefined類型只有一個值,即特殊的undefined。使用var聲明變數但沒有進行初始化賦值時,這個變數的值就是undefined。
eg:
1 var message; 2 alert(message);
結果圖:
上面的例子只是聲明瞭變數message,但沒有對其進行初始化。
註意:
(1)未經初始化的變數,其預設值為undefined,與沒有進行定義的變數是不一樣的。
eg:
1 var message; 2 alert(message); 3 alert(age);
第三行會出現錯誤:
運行以上代碼,第一個警告框會顯示變數message的值,即undefined。第二個警告框由於傳遞給alert()函數的是沒有聲明的變數age,則會導致一個錯誤。
對沒有聲明的變數,只能執行一項操作,即使用typeof操作符檢測其數據類型(對沒有聲明的變數調用delete不會導致錯誤,但是這樣做沒有實際意義,而且在嚴格模式下會導致錯誤。)
(2)使用alert()函數,輸出的變數的值,已經定義聲明,但是沒有進行初始化的變數的值為“undefined”,使用typeof操作符輸出的變數的數據類型,已經定義聲明,但是沒有進行初始化的變數的數據類型也是“undefined”。
(3)對沒有定義的變數使用typeof操作符同樣也是返回undefined。
eg:
1 var message; 2 alert(typeof message); 3 alert(typeof age);
上面的代碼會出現兩個警告框,都是顯示“undefined”。
3.Null類型
null類型的數據只有一個值,就是null,null值表示一個空對象的指針,當用typeof操作符檢測null時,會返回“object”。
eg:
1 var car=null; 2 alert(typeof(car));
如果定義的變數是準備來保存對象的,最好將該變數初始化為null而是不其他的值。實際上undefined值是派生自null值的,因此ECMA-262規定它們的相等性測試要返回true。
alert(null==undefined);
註意:
儘管null和undefined有這樣的關係,但是它們的用途是完全不同的。我們知道,在一般情況下,都沒有必要把一個變數的值顯式地設置為undefined,但是null卻不同,只要意在保存對象的變數還有真正保存對象,就應該明確地讓該變數保存為null值。
這樣做不僅可以體現null作為空對象指針的慣例,也有助於進一步區分null和undefined。
4.Boolean類型
(1)該類型的值:true和false。(這兩個值和數字值不是一回事,因此true不一定等於1,false不一定等於0。)
註意:Boolean類型的字面值是區分大小寫的。
(2)ECMAScript中所有類型的值都有與Boolean值等價的值。要將一個值轉化為其對應的Boolean值,可以轉換函數Boolean(),至於放回的值是true還是false,取決於要轉換至的數據類型及其實際值。
註:各種數據類型及其對應的轉換規則,詳見高程P26.
5.Number類型
(1)八進位字面值的第一位必須是0,當數字序列超過0~7時,前導0會被忽略,後面的數字將當做十進位數值解析。
八進位子在嚴格模式下無效的,會導致Javascript引擎拋出錯誤。
(2)在進行算術運算時,八進位和十六進位都會被轉換成十進位數值。
(3)浮點數:該數值中必須包含一個小數點,並且小數點後面必須至少有一位數字。
註意:由於保存浮點數值需要的記憶體空間是保存整數的兩倍,因此ECMAScript會不失時機地將浮點數轉換為整數來保存。顯然,如果小數點後沒有任何數字,這個數值可以作為整數來保存,如果浮點數值本身就是一個整數(eg:1.0),那麼該值也會被轉換為整數。
(4)預設情況下,ECMAScript會將小數點後面帶有6個零以上的浮點數值轉換為以e表示法表示的數值。
(5)浮點數的最高精度為17位小數,但是在進行計算時其精度遠不如整數。
eg:0.1+0.2的結果不是等於0.3,而是等於0.30000000000000004.
用代碼測試情況如下:
var a=0.1,b=0.2;
if(a+b==0.30000000000000004){
alert("You got 0.3");
}
結果:
當代碼為:
var a=0.1,b=0.2;
if(a+b==0.3){
alert("You got 0.3");
}
時,測試無法通過。
因此,一般不要測試某個特定的浮點數值。