JavaScript類(lèi)型系統(tǒng)之基本數(shù)據(jù)類(lèi)型與包裝類(lèi)型
寫(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)文章
JS 頁(yè)面自動(dòng)加載函數(shù)(兼容多瀏覽器)
兼容多個(gè)瀏覽器的自動(dòng)加載函數(shù)。2009-05-05
使用layui+ajax實(shí)現(xiàn)簡(jiǎn)單的菜單權(quán)限管理及排序的方法
今天小編就為大家分享一篇使用layui+ajax實(shí)現(xiàn)簡(jiǎn)單的菜單權(quán)限管理及排序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
前端使用正則表達(dá)式進(jìn)行校驗(yàn)的方法總結(jié)大全
很多時(shí)候我們需要校驗(yàn)用戶(hù)輸入的值是否正確,如果格式固定的,直接把錯(cuò)誤的值傳給后端顯然是不合理的,所以我們要直接在前端進(jìn)行正則校驗(yàn),這篇文章主要給大家介紹了關(guān)于前端使用正則表達(dá)式進(jìn)行校驗(yàn)的相關(guān)資料,需要的朋友可以參考下2024-07-07
js原生跨域_用script標(biāo)簽的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇js原生跨域_用script標(biāo)簽的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
原生js+cookie實(shí)現(xiàn)購(gòu)物車(chē)功能的方法分析
這篇文章主要介紹了原生js+cookie實(shí)現(xiàn)購(gòu)物車(chē)功能的方法,結(jié)合實(shí)例形式分析了javascript結(jié)合cookie存儲(chǔ)實(shí)現(xiàn)購(gòu)物車(chē)功能的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
js和jq使用submit方法無(wú)法提交表單的快速解決方法
下面小編就為大家?guī)?lái)一篇js和jq使用submit方法無(wú)法提交表單的快速解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-05-05
d3.js實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)拓?fù)鋱D實(shí)例代碼
最近一直在學(xué)習(xí)d3.js,大家都知道d3.js是一個(gè)非常不錯(cuò)的數(shù)據(jù)可視化庫(kù),我們可以用它來(lái)做一些比較酷的東西,比如可以來(lái)顯示一些簡(jiǎn)單的網(wǎng)絡(luò)拓?fù)鋱D,這篇文中就通過(guò)實(shí)例代碼給大家介紹了如何利用d3.js實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)拓?fù)鋱D,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-11-11
微信小程序獲取地理位置及經(jīng)緯度授權(quán)代碼實(shí)例
這篇文章主要介紹了微信小程序獲取地理位置及經(jīng)緯度授權(quán)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09

