欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript類(lèi)型系統(tǒng)之基本數(shù)據(jù)類(lèi)型與包裝類(lèi)型

 更新時(shí)間:2016年01月06日 09:22:07   作者:小火柴的藍(lán)色理想  
javascript的數(shù)據(jù)類(lèi)型可以分為兩種:原始類(lèi)型和引用類(lèi)型,在此文給大家提到。本文主要給大家介紹javascript類(lèi)型系統(tǒng)之基本數(shù)據(jù)類(lèi)型與包裝類(lèi)型,涉及到j(luò)s 基本類(lèi)型 包裝類(lèi)相關(guān)知識(shí),本文介紹的詳細(xì),具有參考借鑒價(jià)值,對(duì)本文感興趣的朋友一起學(xué)習(xí)吧

寫(xiě)在前面的話

  javascript的數(shù)據(jù)類(lèi)型可以分為兩種:原始類(lèi)型和引用類(lèi)型

  原始類(lèi)型也稱(chēng)為基本類(lèi)型或簡(jiǎn)單類(lèi)型,因?yàn)槠湔紦?jù)空間固定,是簡(jiǎn)單的數(shù)據(jù)段,為了便于提升變量查詢(xún)速度,將其存儲(chǔ)在棧(stack)中(按值訪問(wèn))。其中,javascript基本數(shù)據(jù)類(lèi)型包括Undefined、Null、Boolean、Number和String五種

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

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

Undefined

  Undefined類(lèi)型只有一個(gè)值,就是undefined。當(dāng)聲明的變量未初始化時(shí),該變量的默認(rèn)值是undefined

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

  對(duì)于尚未聲明過(guò)的變量只能執(zhí)行一項(xiàng)操作,使用typeof操作符檢測(cè)其數(shù)據(jù)類(lèi)型,但嚴(yán)格模式下會(huì)導(dǎo)致錯(cuò)誤

typeof(test);//undefined

出現(xiàn)場(chǎng)景

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

  [2]獲取對(duì)象不存在的屬性

  [3]無(wú)返回值的函數(shù)的執(zhí)行結(jié)果

  [4]函數(shù)的參數(shù)沒(méi)有傳入

  [5]void(expression)

類(lèi)型轉(zhuǎn)換

  Boolean(undefined):  false
  Number(undefined):  NaN
  String(undefined):  'undefined'

Null

  Null類(lèi)型只有一個(gè)值,就是null。邏輯角度看,null值表示一個(gè)空對(duì)象指針,如果定義的變量將用于保存對(duì)象,最好將該變量初始化為null。實(shí)際上undefined值是派生自null值的,所以u(píng)ndefined == null

  [注意]null是空對(duì)象指針,而[]是空數(shù)組,{}是空對(duì)象,三者不相同

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

出現(xiàn)場(chǎng)景

  對(duì)象不存在時(shí)

類(lèi)型轉(zhuǎn)換

  Boolean(null):   false
  Number(null):   0
  String(null):    'null'

  [注意]因?yàn)閡ndefined和null不是構(gòu)造器類(lèi)型,所以不能添加自定義屬性

包裝類(lèi)型

  包裝類(lèi)型是特殊的引用類(lèi)型。每當(dāng)讀取一個(gè)基本類(lèi)型值的時(shí)候,后臺(tái)就會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的基本包裝類(lèi)型的對(duì)象,從而可能調(diào)用一些方法來(lái)操作這些數(shù)據(jù)。包裝類(lèi)型共包括Boolean、Number和String三種

var s1 = 'some text';
var s2 = s1.substring(2);
//在上述過(guò)程中,實(shí)際上發(fā)生了三個(gè)步驟
var s1 = new String('some text'); //(1)創(chuàng)建String類(lèi)型的一個(gè)實(shí)例 
var s2 = s1.substring(2); //(2)在實(shí)例上調(diào)用指定的方法
s1 = null; //(3)銷(xiāo)毀這個(gè)實(shí)例 

  [注意]引用類(lèi)型和基本包裝類(lèi)型的主要區(qū)別是對(duì)象的生存期。使用new操作符創(chuàng)建的引用類(lèi)型的實(shí)例,在執(zhí)行流離開(kāi)當(dāng)前作用域之前都一直保存在內(nèi)存中。而自動(dòng)創(chuàng)建的基本包裝類(lèi)型的對(duì)象,則只存在于一行代碼的執(zhí)行瞬間,然后立即被銷(xiāo)毀。這意味著不能在運(yùn)行時(shí)為基本類(lèi)型值添加屬性和方法

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

創(chuàng)建方式

顯式創(chuàng)建包裝類(lèi)型共兩種方式:

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

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

  [2]構(gòu)造函數(shù)方式[不建議使用]

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

  [注意]使用new調(diào)用基本包裝類(lèi)型的構(gòu)造函數(shù)與直接調(diào)用同名的轉(zhuǎn)型函數(shù)是不一樣的

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

Boolean

  Boolean類(lèi)型只有兩個(gè)值:true 和 false。Boolean包裝類(lèi)型是與布爾值對(duì)應(yīng)的引用類(lèi)型,在布爾表達(dá)式中使用Boolean對(duì)象容易造成誤解

出現(xiàn)場(chǎng)景

  [1]條件語(yǔ)句導(dǎo)致系統(tǒng)執(zhí)行的隱士類(lèi)型轉(zhuǎn)換

  [2]字面量或變量定義

類(lèi)型轉(zhuǎn)換

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

Boolean()

  Boolean(undefined):false
    Boolean(null):false

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

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

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

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

包裝類(lèi)型繼承的方法

  valueOf():返回基本類(lèi)型值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只有一種數(shù)字類(lèi)型,既可以表示32位的整數(shù),還可以表示64位的浮點(diǎn)數(shù)

  關(guān)于Number類(lèi)型的詳細(xì)信息移步到此

String

  String類(lèi)型是javascript中唯一沒(méi)有固定大小的原始類(lèi)型

下面接著來(lái)理解下JavaScript基本數(shù)據(jù)類(lèi)型的包裝對(duì)象

現(xiàn)象:為什么可以對(duì)字符串的操作采用對(duì)象的表示法?

例如:          

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

解析:

JavaScript三個(gè)基本數(shù)據(jù)類(lèi)型都有相應(yīng)的對(duì)象類(lèi);分別為Sring,Number,Boolean類(lèi);
JavaScript可以靈活的將一種類(lèi)型的值轉(zhuǎn)換為另一種類(lèi)型;
當(dāng)我們?cè)趯?duì)象環(huán)境中使用字符串時(shí),即當(dāng)我們?cè)噲D訪問(wèn)這個(gè)字符串的屬性或方法時(shí);
JavaScript會(huì)為這個(gè)字符串值內(nèi)部地創(chuàng)建一個(gè)String包裝對(duì)象;
String對(duì)象會(huì)暫時(shí)代替原始的字符串值,完成我們的訪問(wèn);
這個(gè)被內(nèi)部創(chuàng)建的String對(duì)象是瞬間存在的,它的作用是使我們可以正常訪問(wèn)屬性和方法;
String對(duì)象在使用過(guò)后會(huì)被系統(tǒng)丟棄掉;
而原始值并不會(huì)被改變;

    以上同樣適用于數(shù)字和布爾值類(lèi)型;

    使用Object()函數(shù),任何數(shù)字、字符串、布爾值都可以轉(zhuǎn)換為它對(duì)應(yīng)的包裝對(duì)象;

    例如:

var number_wrapper  = Object (3);

相關(guān)文章

最新評(píng)論