資源描述:
《javascript類型系統(tǒng)之基本數(shù)據類型與包裝類型_javascript技巧》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、JavaScript類型系統(tǒng)之基本數(shù)據類型與包裝類型寫在前面的話javascript的數(shù)據類型可以分為兩種:原始類型和引用類型原始類型也稱為基本類型或簡單類型,因為其占據空間同定,是簡單的數(shù)據段,為了便于提升變量查詢速度,將其存儲在棧(stack)中(按值訪問)。其中,javascript基木數(shù)據類型包括Undefined>Null>Boolean、Number和String五種引用類型由于其值的大小會改變,所以不能將其存放在棧屮,否則會降低變量查詢速度,因此其存儲在堆(heap)中,存儲在變量處的值是一個指針,指向存儲對象的內存處(按址
2、訪問)[注意]對于引用類型的值,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法;但基本類型不可以添加屬性和方法數(shù)字(12)布爾值(true)null(對象)(對象)(對象)(對象)(對象)地址(0)字符串("test')UndefinedUndefined類型只有一個值,就是undcfincdo當聲明的變量未初始化時,該變量的默認值是undefinedvartest;//undefinedconsole.log(test二二undefined);//truevartest二undefined;//undefined對于尚未聲明過的變
3、量只能執(zhí)行一項操作,使用typeof操作符檢測其數(shù)據類型,但嚴格模式下會導致錯謀typeof(test);//undefined出現(xiàn)場景[1]已聲明未賦值的變量[2]獲取對象不存在的屬性[3]無返回值的函數(shù)的執(zhí)行結果[4]函數(shù)的參數(shù)沒有傳入[5]void(expression)類型轉換Boolean(undefined):falseNumber(undefined):NaNString(undefined):'undefined'NullNull類型只有一個值,就是nullo邏輯角度看,rmll值表示一個空對象指針,如果定義的變量將用于保
4、存對象,最好將該變量初始化為nullo實際上undefined值是派生自null值的,所以undefined==null[注意]null是空對象指針,而□是空數(shù)組,{}是空對象,三者不和同console.log(nul1二二undefined);//true出現(xiàn)場景對象不存在時類型轉換Boolean(null):falseNumber(null):0String(null):'null'[注意]因為undefined和null不是構造器類型,所以不能添加自定義屬性包裝類型包裝類型是特殊的引用類型。每當讀取一個基本類型值的時候,后臺就會創(chuàng)建
5、一個對應的基本包裝類型的對象,從而可能調用一些方法來操作這些數(shù)據。包裝類型共包描Boolean、Number和String三種varsi=sometext';vars2=sl?substring(2);//在上述過程中,實際上發(fā)生了三個步驟varsi=newStringCsometext');//(l)創(chuàng)建String類型的一個實例vars2=si.substring(2);//(2)在實例上調用指定的方法si=null;//(3)銷毀這個實例[注意]引用類型和基本包裝類型的主要區(qū)別是對象的生存期。使用new操作符創(chuàng)建的引用類型的實例,在
6、執(zhí)行流離開當前作用域Z前都一直保存在內存屮。而口動創(chuàng)建的基本包裝類型的對彖,則只存在于一行代碼的執(zhí)行瞬間,然后立即被銷毀。這意味著不能在運行吋為基木類型值添加屬性和方法varsi=sometext';si.color='red';alert(si.color);//undefined創(chuàng)建方式顯式創(chuàng)建包裝類型共兩種方式:[l]Objcct方式[不建議使用]vars二newObject('abc');varb=newObject(true);varn二newObject(123);[2]構造函數(shù)方式[不建議使用]varb=newBoolean
7、(true);varn=newNumber(123);varnewString(,abc,);[注意]使用new調用基木包裝類型的構造函數(shù)與直接調用同名的轉型函數(shù)是不一樣的varvalue二,25,;varnumber=Number(value);console.log(typeofnumber);//numbervarobj二newNumber(value);console.log(typeofobj);//objectBooleanBoolean類型只有兩個值:true和falseoBoolean包裝類型是與布爾值對應的引用類型,在布
8、爾表達式中使用Boolean對象容易造成誤解出現(xiàn)場景[1]條件語句導致系統(tǒng)執(zhí)行的隱士類型轉換[2]字而量或變量定義類型轉換Number(true):1
9、
10、Number(false):0Stri