在javascript中申明變量使用的關鍵字都是var,這點與其他的程式設計語言不盡相同,但是javascript亦含有五種基本的資料類型(也可以說是簡單資料類型),它們分别是:Undefined,Null,Boolean,Number和String。還含有一種複雜資料類型—Object。這裡我們不談複雜資料類型。
1、typeof
typeof這個關鍵字是一定要說的,因為javascript是松散類型的,在變量申明時并沒有使用與之類型相對應的關鍵字,如果在代碼中想要獲知某個變量的基本資料量,就可以使用typeof。這裡要注意的是typeof傳回的是字元串類型。
(1)、"undefined"——未申明,或者變量的值即為undefined或者未初始化;
(2)、"boolean" ——如果這變量的值是布爾類型;
(3)、"string" ——值是字元串類型;
(4)、"number" ——值是數字類型;
(5)、"object" ——對象或者值為null;
(5)、"function" ——函數。
例如:
var testString = "Hello";
var testBoobean = true;
var testUndefined = undefined;
var testUndefined1;
var testNull = null;
var testObject = {a:1};
var testFunction = function(){return;};
alert(testString);//"string"
alert(testBoobean);//"boolean"
alert(testUndefined);//"undefined"
alert(testUndefined1);//"undefined"
alert(testUndefined2);//"undefined"
alert(testNull);//"object"
alert(testObject);//"object"
alert(testFunction);//"function"
在js中函數也是對象,但是函數又要一些差別與其他對象的特定,是以ECMAScript在使用typeof的時候将其區分開來。
2、Undefined
這是一個很有意思的資料類型,因為它的值隻有一個,那就是undefined。在申明變量時如果沒有将變量指派的話這個變量也是屬于Undefined類型的。
例子:
var testUndefined;
var testUndefined1 = undefined;
//申明的時候沒有指派,那麼解析器會自動給其指派為undefined,是以輸出為true
alert(testUndefined == undefined)//true
alert(testUndefined1 == undefined)//true
//根據上面所說的typeof傳回的是字元串"undefined"是以輸出為true
alert(typeof testUndefined == "undefined")//true
如果一個變量沒有申明就直接去通路解釋器會報錯誤資訊,但是這樣的變量如果使用typeof傳回的結果也是"undefined"。
3、Null
Null也是一個隻有一個值得資料類型,它的值就是null,任何變量隻要給其指派為null的話這個變量的資料類型就是Null類型。null值表示控對象指針,是以申明的變量要是想用來儲存對象并且在申明之初還不能确定具體儲存哪個對象的時候就将其指派為null,在使用的時候隻要檢查該變量是否為null就可以知道該變量是否儲存了對象。
例如:
var testNull = null;
//對null使用typeof傳回的是"object"
alert(typeof testNull); //"object"
alert(testNull != null); //false
testNull = o {a:1};
alert(testNull != null);//true
有上面的代碼可以很清楚的看出如果将變量初始化為null那麼隻要判斷其值是否為null就知道該變量是否儲存了對象的引用,當然事先申明為null的變量也可以儲存基本類型資料。
其實null和undefined還是有點微妙的關系的,在javascript中undefined值派生自null,是以ECMA-26規定了它們的相等性測試為true。
例如:
alert(undefined == null)//true
var testNull = null;
var testUndefined = undefined;
alert(testNull == null)//true
alert(testNull == undefined)//true
alert(testUndefined == undefined)//true
alert(testUndefined == null)//true
在實際的程式設計中我們沒有必要将一個變量指派為undefined,但是卻有很多情況下要将變量指派為null,将變量指派為null可以便于我們将它與undefined區分也便于垃圾回收處理。
4、Boolean
在javascript中Boolean類型用還是比較多的一種簡單資料類型,它有兩個值,分别是true和false,因為在javascript中字母是區分大小寫的,是以True和False不是Boolean的值。
可以通過如下方式給Boolean類型的變量指派:
var testBoolean = true;
var testBoolean1 = false;
調用Boolean()方法可以将任何類型的值轉化成與之相對應的Boolean類型的值,也就是可以将其轉化成true或者false。
例如:
//将非空字元串轉化成true
alert(Boolean("a"))//true
//将空字元串轉化成false
alert(Boolean(""))//false
//将對象轉化成true
alert(Boolean({a:"a"}))//true
将各種類型的值轉化成Boolean類型的規則如下:
資料類型 | 轉化成true的值 | 轉化成false的值 |
Boolean | ture | false |
String | 所有的非空字元串 | ""(空字元串) |
Number | 任何非零數字(包括無窮大) | 0和NaN |
Object | 任何對象 | 不存在 |
Undefined | 不存在 | undefined |
var test = "a";
if(test){
alert("test轉換成了true");
}//test轉換成了true
運作上述代碼會彈出一個框,并且在框中顯示“test轉換成了true”,這個例子說明在需要使用Boolean的地方,即使沒有顯示的調用Boolean()方法,解釋器還是會自動的調用的,所有在使用的時候一定要注意。
5、Number
javascript為了支援各種數值類型,定義了不同數值字面量格式。
最基本的是字面量是十進制,十進制整數可以像下面這樣直接在代碼中輸入:
var intNum = 55 //整數
此外還有八進制和十六進制數的字面量。八進制在js中表示是第一位一定要是0,後面就是八進制字數序列(0~7),如果字面量值超出了範圍,前面的0會被忽略,後面的值會被當成十進制解析。請看下面的例子:
var octalNum1 = 070 //八進制的56
var octalNum2 = 039//無效的八進制---解析為十進制的39
十六進制字面量前兩位必須是0x,後面跟十六進制數字(0~9及A~F)。字母A~F不區分大小寫。
var hexNum1 = 0xA//十六進制的10
var hexNum2 = 0x1f//十六進制的31
在進行數值計算時,不論是八進制還是十六進制最終都會被轉化成十進制數值。
var hexNum1 = 0xA//十六進制的10
var hexNum2 = 0x1f//十六進制的31
alert(hexNum1+hexNum2);//輸出41
(1)、浮點數
浮點數就是帶有小數點,并且小數點後至少有一位的數字的數。在javascript中指派的時候對于 浮點數的小數點的前面可以沒有數字,但是我們不推薦這種寫法。下面是浮點數的幾個例子:
var floatNum1 = 1.1//有效
var floatNum2 = 0.2//有效
var floatNum3 = .1//有效,但不推薦使用
為了盡量減少記憶體的使用,ECMAScript會不失時機的将一些浮點數儲存為整數,因為浮點數在 存儲的時候占用的空間比整數多出一倍。哪種浮點數會被儲存為整數呢?1、小數點後面沒有數字 的;2、小數點後面全是0的。例如:
var floatNum4 = 1. //小數點後面沒有數字的,會被儲存為整數1
var floatNum5 = 1.0//小數點後面全是0,會被儲存為整數1
對于很大的或者很小的值,也可以用科學計數發的浮點類型表示。例如:
var floatNum6 = 2.33e7 //等于23300000
在預設情況下ECMAScript會将小數點後面0的個數大于等于6個的數字用科學計數發表示。
浮點數值的最高精度是17位小數,但是在進行算術計算時其精度遠遠不如整數。例如,0.1加0.2的結果不是0.3,而是0.30000000000000004。這個舍入誤差會導緻無法測試特定的浮點數值。例如:
var a = 0.2;
var b = 0.1
alert(a + b = 0.3)//輸出false
(2)、數值範圍
未完待續。。。