国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 10:51:14
字體:
來源:轉載
供稿:網友

寫在前面的話

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

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

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

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

Undefined

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

var test;//undefinedconsole.log(test == undefined);//truevar 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);//numbervar 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 trueconsole.log(typeof false.valueOf(),false.valueOf());//boolean falseconsole.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中唯一沒有固定大小的原始類型

下面接著來理解下JavaScript基本數據類型的包裝對象

現象:為什么可以對字符串的操作采用對象的表示法?

例如:          

var s    = "this is a String";      var len   = s.length; 

解析:

JavaScript三個基本數據類型都有相應的對象類;分別為Sring,Number,Boolean類;
JavaScript可以靈活的將一種類型的值轉換為另一種類型;
當我們在對象環境中使用字符串時,即當我們試圖訪問這個字符串的屬性或方法時;
JavaScript會為這個字符串值內部地創建一個String包裝對象;
String對象會暫時代替原始的字符串值,完成我們的訪問;
這個被內部創建的String對象是瞬間存在的,它的作用是使我們可以正常訪問屬性和方法;
String對象在使用過后會被系統丟棄掉;
而原始值并不會被改變;

    以上同樣適用于數字和布爾值類型;

    使用Object()函數,任何數字、字符串、布爾值都可以轉換為它對應的包裝對象;

    例如:

var number_wrapper  = Object (3);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扶余县| 澄城县| 兴安盟| 拉萨市| 平远县| 台安县| 横峰县| 香港 | 嘉定区| 山东| 宾川县| 清流县| 兰考县| 靖州| 盖州市| 承德市| 铅山县| 炎陵县| 织金县| 金坛市| 灌云县| 磴口县| 磐安县| 章丘市| 保定市| 修水县| 武夷山市| 蓬莱市| 龙江县| 大关县| 宁国市| 海晏县| 凤台县| 贵州省| 金阳县| 安岳县| 安龙县| 广昌县| 图片| 灵川县| 利辛县|