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

首頁 > 編程 > JavaScript > 正文

JavaScript中的原始值和復(fù)雜值

2019-11-20 10:50:50
字體:
供稿:網(wǎng)友

 前面的話

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

特性

原始值(primitive value)

簡(jiǎn)單的說:原始值是固定而簡(jiǎn)單的值,是存放在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段,也就是說,它們的值直接存儲(chǔ)在變量訪問的位置.

  原始值是表示Javascript中可用的數(shù)據(jù)或信息的最底層形式或最簡(jiǎn)單形式。原始類型的值被稱為原始值,是因?yàn)樗鼈兪遣豢杉?xì)化的。也就是說,數(shù)字是數(shù)字,字符是字符,布爾值則是true或false,null和undefined就是null和undefined。這些值本身很簡(jiǎn)單,不能表示由其他值組成的值

有哪些類型是原始類型呢?

原始類型(primitive type)有以下五種類型:Undefined,Null,Boolean,Number,String

我們可以使用typeof來判斷一個(gè)是否在某個(gè)類型的范圍內(nèi).

typeof運(yùn)算符

對(duì)變量或值使用typeof運(yùn)算符將會(huì)返回下列值之一:

注意:

1.返回值為字符串類型.

2.和原始類型比,還差了個(gè)null,這個(gè)比較特殊,使用typeof(null),返回的是"object",我們將null理解成是object的占位符.

復(fù)雜值

  復(fù)雜值可以由很多不同類型的javascript對(duì)象組成。復(fù)雜對(duì)象其在內(nèi)存中的大小是未知的,因?yàn)閺?fù)雜對(duì)象可以包含任何值,而不是一個(gè)特定的已知值

存儲(chǔ)方式

棧存儲(chǔ)

  因?yàn)樵贾嫡紦?jù)空間固定,是簡(jiǎn)單的數(shù)據(jù)段,為了便于提升變量查詢速度,將其存儲(chǔ)在棧(stack)中

堆存儲(chǔ)

  由于復(fù)雜值的大小會(huì)改變,所以不能將其存放在棧中,否則會(huì)降低變量查詢速度,因此其存儲(chǔ)在堆(heap)中,存儲(chǔ)在變量處的值是一個(gè)指針,指向存儲(chǔ)對(duì)象的內(nèi)存處

訪問方式

按值訪問

  原始值是作為不可細(xì)化的值進(jìn)行存儲(chǔ)和操作的,引用它們會(huì)轉(zhuǎn)移其值

var myString = 'foo';var myStringCopy = myString;var myString = null;console.log(myString,myStringCopy);//null,'foo' 

引用訪問

  復(fù)雜值是通過引用進(jìn)行存儲(chǔ)和操作的,而不是實(shí)際的值。創(chuàng)建一個(gè)包含復(fù)雜對(duì)象的變量時(shí),其值是內(nèi)存中的一個(gè)引用地址。引用一個(gè)復(fù)雜對(duì)象時(shí),使用它的名稱(即變量或?qū)ο髮傩?通過內(nèi)存中的引用地址獲取該對(duì)象值

var myObject = {};var copyOfMyObject = myObject;//沒有復(fù)制值,而是復(fù)制了引用myObject.foo = 'bar';//操作myObject中的值//現(xiàn)在如果輸出myObject和copyOfMyObject,則都會(huì)輸出foo屬性,因?yàn)樗鼈円玫氖峭粋€(gè)對(duì)象console.log(myObject,copyOfMyObject);//Object{foo="bar"} 

比較方式

  原始值采用值比較,而復(fù)雜值采用引用比較。復(fù)雜值只有在引用相同的對(duì)象(即有相同的地址)時(shí)才相等。即使是包含相同對(duì)象的兩個(gè)變量也彼此不相等,因?yàn)樗鼈儾⒉恢赶蛲粋€(gè)對(duì)象

var price1 = 10;var price2 = 10;var price3 = new Number('10');var price4 = price3;console.log(price1 == price2);//trueconsole.log(price1 == price3);//falseprice4 = 10;console.log(price4 == price3);//trueconsole.log(price4 === price3);//false var objectFoo = {same:'same'};var objectBar = {same:'same'};console.log(objectFoo == objectBar);//falsevar objectA = {foo: 'bar'};var objectB = objectA;console.log(objectA == objectB);//true 

動(dòng)態(tài)屬性

  對(duì)于復(fù)雜值,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法;但簡(jiǎn)單值不可以添加屬性和方法

  復(fù)雜值支持動(dòng)態(tài)對(duì)象屬性,因?yàn)槲覀兛梢远x對(duì)象,然后創(chuàng)建引用,再更新對(duì)象,并且所有指向該對(duì)象的變量都會(huì)獲得更新。一個(gè)新變量指向現(xiàn)有的復(fù)雜對(duì)象,并沒有復(fù)制該對(duì)象。這就是復(fù)雜值有時(shí)被稱為引用值的原因。復(fù)雜值可以根據(jù)需求有任意多個(gè)引用,即使對(duì)象改變,它們也總是指向同一個(gè)對(duì)象

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)建的一個(gè)對(duì)象來使用時(shí),Javascript會(huì)將其轉(zhuǎn)換成一個(gè)對(duì)象,以便可以使用對(duì)象的特性和方法,而后拋棄對(duì)象性質(zhì),并將它變回到原始值

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 白水县| 南召县| 兴山县| 龙岩市| 建昌县| 永善县| 乾安县| 都匀市| 革吉县| 迭部县| 老河口市| 太白县| 天等县| 高密市| 武穴市| 海伦市| 临猗县| 天门市| 准格尔旗| 临漳县| 博兴县| 杂多县| 东城区| 乳山市| 沙洋县| 惠州市| 桂阳县| 无锡市| 盘山县| 蕲春县| 巨野县| 蒙城县| 郸城县| 肥城市| 蛟河市| 仁布县| 通化县| 温宿县| 东乌| 隆德县| 宣汉县|