新聞中心
Javascript的數(shù)據(jù)類型可以分為兩種:原始類型和引用類型。原始類型也稱為基本類型或簡單類型,javascript基本數(shù)據(jù)類型包括Undefined、Null、Boolean、Number和String五種,而引用類型也稱為復(fù)雜類型,在Javascript中是Object。與此相對應(yīng),它們的值也分別被稱為原始值和復(fù)雜值

公司主營業(yè)務(wù):網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出瓊結(jié)免費(fèi)做網(wǎng)站回饋大家。
特性
原始值
原始值是表示Javascript中可用的數(shù)據(jù)或信息的最底層形式或最簡單形式。原始類型的值被稱為原始值,是因?yàn)樗鼈兪遣豢杉?xì)化的。也就是說,數(shù)字是數(shù)字,字符是字符,布爾值則是true或false,null和undefined就是null和undefined。這些值本身很簡單,不能表示由其他值組成的值
復(fù)雜值
復(fù)雜值可以由很多不同類型的javascript對象組成。復(fù)雜對象其在內(nèi)存中的大小是未知的,因?yàn)閺?fù)雜對象可以包含任何值,而不是一個特定的已知值
存儲方式
棧存儲
因?yàn)樵贾嫡紦?jù)空間固定,是簡單的數(shù)據(jù)段,為了便于提升變量查詢速度,將其存儲在棧(stack)中
堆存儲
由于復(fù)雜值的大小會改變,所以不能將其存放在棧中,否則會降低變量查詢速度,因此其存儲在堆(heap)中,存儲在變量處的值是一個指針,指向存儲對象的內(nèi)存處
訪問方式
按值訪問
原始值是作為不可細(xì)化的值進(jìn)行存儲和操作的,引用它們會轉(zhuǎn)移其值
var myString = 'foo';
var myStringCopy = myString;
var myString = null;
console.log(myString,myStringCopy);//null,'foo'
引用訪問
復(fù)雜值是通過引用進(jìn)行存儲和操作的,而不是實(shí)際的值。創(chuàng)建一個包含復(fù)雜對象的變量時,其值是內(nèi)存中的一個引用地址。引用一個復(fù)雜對象時,使用它的名稱(即變量或?qū)ο髮傩?通過內(nèi)存中的引用地址獲取該對象值
var myObject = {};
var copyOfMyObject = myObject;//沒有復(fù)制值,而是復(fù)制了引用
myObject.foo = 'bar';//操作myObject中的值
//現(xiàn)在如果輸出myObject和copyOfMyObject,則都會輸出foo屬性,因?yàn)樗鼈円玫氖峭粋€對象
console.log(myObject,copyOfMyObject);//Object{foo="bar"}
比較方式
原始值采用值比較,而復(fù)雜值采用引用比較。復(fù)雜值只有在引用相同的對象(即有相同的地址)時才相等。即使是包含相同對象的兩個變量也彼此不相等,因?yàn)樗鼈儾⒉恢赶蛲粋€對象
var price1 = 10;
var price2 = 10;
var price3 = new Number('10');
var price4 = price3;
console.log(price1 == price2);//true
console.log(price1 == price3);//false
price4 = 10;
console.log(price4 == price3);//true
console.log(price4 === price3);//false
var objectFoo = {same:'same'};
var objectBar = {same:'same'};
console.log(objectFoo == objectBar);//false
var objectA = {foo: 'bar'};
var objectB = objectA;
console.log(objectA == objectB);//true
動態(tài)屬性
對于復(fù)雜值,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法;但簡單值不可以添加屬性和方法
復(fù)雜值支持動態(tài)對象屬性,因?yàn)槲覀兛梢远x對象,然后創(chuàng)建引用,再更新對象,并且所有指向該對象的變量都會獲得更新。一個新變量指向現(xiàn)有的復(fù)雜對象,并沒有復(fù)制該對象。這就是復(fù)雜值有時被稱為引用值的原因。復(fù)雜值可以根據(jù)需求有任意多個引用,即使對象改變,它們也總是指向同一個對象
var str = 'test';
str.property = true;
console.log(str.property);//undefined
var objA = {property: 'value'};
var pointer1 = objA;
var pointer2 = pointer1;
objA.property = null;
console.log(objA.property,pointer1.property,pointer2.property);//null null null
包裝類型
原始值被當(dāng)作構(gòu)造函數(shù)創(chuàng)建的一個對象來使用時,Javascript會將其轉(zhuǎn)換成一個對象,以便可以使用對象的特性和方法,而后拋棄對象性質(zhì),并將它變回到原始值
本文題目:詳解JavaScript原始值和復(fù)雜值
URL網(wǎng)址:http://fisionsoft.com.cn/article/djcsoes.html


咨詢
建站咨詢
