javascript類型系統之基本數據類型與包裝類型

jopen 8年前發布 | 9K 次閱讀 JavaScript開發 JavaScript

目錄
[1]Undefined[2]Null[3]Boolean[4]Number[5]String </div>

前面的話

javascript的數據類型可以分為兩種:原始類型和引用類型

原始類型也稱為基本類型或簡單類型,因為其占據空間固定,是簡單的數據段,為了便于提升變量查詢速度,將其存儲在棧(stack)中(按值訪問)。其中,javascript基本數據類型包括Undefined、Null、Boolean、Number和String五種

引用類型由于其值的大小會改變,所以不能將其存放在棧中,否則會降低變量查詢速度,因此其存儲在堆(heap)中,存儲在變量處的值是一個指針,指向存儲對象的內存處(按址訪問)

[注意]對于引用類型的值,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法;但基本類型不可以添加屬性和方法

Undefined

Undefined類型只有一個值,就是undefined。當聲明的變量未初始化時,該變量的默認值是undefined

var test;//undefined
console.log(test == undefined);//true
var test = undefined;//undefined

對于尚未聲明過的變量只能執行一項操作, 使用typeof操作符檢測其數據類型,但嚴格模式下會導致錯誤

typeof(test);//undefined

出現場景

[1]已聲明未賦值的變量

[2]獲取對象不存在的屬性

[3]無返回值的函數的執行結果

[4]函數的參數沒有傳入

[5]void(expression)

類型轉換

Boolean(undefined):  false

Number(undefined):  NaN

String(undefined): 'undefined'

Null

Null類型只有一個值,就是null。邏輯角度看,null值表示一個空對象指針,如果定義的變量將用于保存對象,最好將該變量初始化為null。實際上undefined值是派生自null值的,所以undefined == null

[注意]null是空對象指針,而[]是空數組,{}是空對象,三者不相同

console.log(null == undefined);//true    

出現場景

對象不存在時

類型轉換

Boolean(null): false

Number(null): 0

String(null): 'null'

[注意]因為undefined和null不是構造器類型,所以不能添加自定義屬性

包裝類型

包裝類型是特殊的引用類型。每當讀取一個基本類型值的時候,后臺就會創建一個對應的基本包裝類型的對象,從而可能調用一些方法來操作這些數據。包裝類型共包括Boolean、Number和String三種

var s1 = 'some text';
var s2 = s1.substring(2);
//在上述過程中,實際上發生了三個步驟
var s1 = new String('some text'); //(1)創建String類型的一個實例  
var s2 = s1.substring(2); //(2)在實例上調用指定的方法
s1 = null; //(3)銷毀這個實例

[注意]引用類型和基本包裝類型的主要區別是對象的生存期。使用new操作符創建的引用類型的實例,在執行流離開當前作用域之前都一直保存在內存中。而自動創建的基本包裝類型的對象,則只存在于一行代碼的執行瞬間,然后立即被銷毀。這意味著不能在運行時為基本類型值添加屬性和方法

var s1 = 'some text';
s1.color = 'red';
alert(s1.color);//undefined

創建方式

顯式創建包裝類型共兩種方式:

[1]Object方式[不建議使用]

var s = new Object('abc');
var b = new Object(true);
var n = new Object(123);

[2]構造函數方式[不建議使用] 

var s = new String('abc');
var b = new Boolean(true);
var n = new Number(123);

[注意]使用new調用基本包裝類型的構造函數與直接調用同名的轉型函數是不一樣的

var value = '25';
var number = Number(value);
console.log(typeof number);//number
var obj = new Number(value);
console.log(typeof obj);//object

Boolean

Boolean類型只有兩個值:true 和 false。Boolean包裝類型是與布爾值對應的引用類型,在布爾表達式中使用Boolean對象容易造成誤解

出現場景

[1]條件語句導致系統執行的隱士類型轉換

[2]字面量或變量定義

類型轉換

Number(true): 1 || Number(false) : 0

String(true):'true'  || String(false):'false'

Boolean()

Boolean(undefined):false

Boolean(null):false

Boolean(非空對象包括空數組[]和空對象{}):true

Boolean(非0): true || Boolean(0和NaN):false

Boolean(非空包括空格字符串):true || Boolean(''):false

[注意]true不一定等于1,false也不一定等于0

包裝類型繼承的方法

valueOf():返回基本類型值true 或 false

toString()和toLocaleString():返回字符串'true' 或'false'

console.log(typeof true.valueOf(),true.valueOf());//boolean true
console.log(typeof false.valueOf(),false.valueOf());//boolean false
console.log(typeof true.toString(),true.toString());//String 'true'
console.log(typeof false.toString(),false.toString());//String 'false'
console.log(typeof true.toLocaleString(),true.toLocaleString());//String 'true'
console.log(typeof false.toLocaleString(),false.toLocaleString());//String 'false'

Number

javascript只有一種數字類型,既可以表示32位的整數,還可以表示64位的浮點數

關于Number類型的詳細信息移步到此

String

String類型是javascript中唯一沒有固定大小的原始類型

關于String類型的詳細信息移步至此

來自: http://www.cnblogs.com/xiaohuochai/p/5097018.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!