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

JavaScript引用類(lèi)型和基本類(lèi)型詳解

 更新時(shí)間:2016年01月06日 11:10:32   投稿:mrr  
這篇文章主要介紹了JavaScript引用類(lèi)型和基本類(lèi)型詳解的相關(guān)資料,需要的朋友可以參考下

在javascript中存在著兩種類(lèi)型的數(shù)據(jù):基本類(lèi)型和引用類(lèi)型。

基本類(lèi)型簡(jiǎn)單的說(shuō)就是簡(jiǎn)單的數(shù)據(jù)段。

引用類(lèi)型是由多個(gè)值構(gòu)成的對(duì)象。

當(dāng)我們進(jìn)行賦值操作時(shí),解析器會(huì)首先分析數(shù)據(jù)是值類(lèi)型還是引用類(lèi)型。

兩種訪問(wèn)方式:

基本類(lèi)型值:按值訪問(wèn),操作的是他們實(shí)際保存的值;

引用類(lèi)型值:按引用訪問(wèn),當(dāng)查詢(xún)時(shí),我們需要先從棧中讀取內(nèi)存地址,然后再順藤摸瓜地找到保存在堆內(nèi)存中的值;

下面就分別介紹一下javascript的這兩種數(shù)據(jù)類(lèi)型。

一.基本數(shù)據(jù)類(lèi)型:

在javascript中存在著六種基本類(lèi)型數(shù)據(jù):string、number、boolean、symbol(ES6新增)、null、undefined。
這五種基本數(shù)據(jù)類(lèi)型可以直接操作保存在變量中的實(shí)際值。

代碼實(shí)例如下:

var a=10;
var b=a;
b=20;
console.log(a);

上面的代碼是一個(gè)簡(jiǎn)單的賦值操作,下面做一下簡(jiǎn)單介紹。

(1).首先數(shù)字是基本數(shù)據(jù)類(lèi)型。
(2).var b=a,此賦值操作實(shí)際上是將a的數(shù)據(jù)拷貝一份,然后賦值給變量b。
(3).a和b是完全獨(dú)立的。
(4).b=20,修改變量b的值不會(huì)影響變量a的值。

圖示如下:

棧內(nèi)存


二.引用類(lèi)型數(shù)據(jù):

在javascript中,引用類(lèi)型數(shù)據(jù)存儲(chǔ)在堆內(nèi)存中,但是不可以直接訪問(wèn)堆內(nèi)存空間中的位置和操作堆內(nèi)存空間。
只能通過(guò)操作對(duì)象的在棧內(nèi)存中的引用地址。所以引用類(lèi)型的數(shù)據(jù),在棧內(nèi)存中保存的實(shí)際上是對(duì)象在堆內(nèi)存中的引用地址。通過(guò)這個(gè)引用地址可以快速查找到保存在堆內(nèi)存中的對(duì)象。

代碼實(shí)例:

var obj1=new Object();
var obj2=obj1;
obj2.name="腳本之家";
console.log(obj1.name);

下面對(duì)代碼上面的代碼做一下分下。

(1).var obj1=new Object(),這是創(chuàng)建一個(gè)對(duì)象,是一個(gè)引用類(lèi)型數(shù)據(jù),變量obj1存儲(chǔ)的是對(duì)象在堆內(nèi)存中的地址。
(2).var obj2=obj1,這個(gè)賦值操作其實(shí)是將對(duì)象在堆內(nèi)存中的存儲(chǔ)地址復(fù)制給變量obj2,也就是兩個(gè)變量存儲(chǔ)的都是指向?qū)嶋H對(duì)象的內(nèi)存地址,指向的是同一個(gè)對(duì)象。
(3).obj2.name="腳本之家",為對(duì)象添加一個(gè)屬性。
(4).console.log(obj1.name),輸出"腳本之家,因?yàn)閮蓚€(gè)變量指向同一個(gè)對(duì)象。

圖示如下:


String一個(gè)特殊的基本數(shù)據(jù)類(lèi)型

在很多語(yǔ)言中,String是以對(duì)象的形式表示的,但在ECMAScript里沒(méi)有沿用這種傳統(tǒng),String是當(dāng)作一種基本數(shù)據(jù)類(lèi)型,但它是一個(gè)比較特殊的基本類(lèi)型。

看上去好像String應(yīng)該做為一個(gè)引用類(lèi)型,可實(shí)際上它不是,因?yàn)樗皇菍?duì)象。那么看起來(lái)它應(yīng)該是基本數(shù)據(jù)類(lèi)型,應(yīng)該是通值傳遞的方式來(lái)操作。

看下面例子:

var stra = "這是一個(gè)字符串";
var strb = stra;
stra = "這是另外一個(gè)字符串";
console.log(strb); // 這是一個(gè)字符串 

上面例子我們看到,仿佛stra通過(guò)值傳遞的方式復(fù)制了一份給了strb。當(dāng)stra改變的時(shí)候,strb并沒(méi)有改變,似乎我們已經(jīng)可以下結(jié)論,String就是個(gè)基本數(shù)據(jù)類(lèi)型。

可是,因?yàn)镾tring是可以任意長(zhǎng)度的,通過(guò)值傳遞,一個(gè)一個(gè)的復(fù)制字節(jié)顯示效率依然很低,看起來(lái)String也可以當(dāng)作引用類(lèi)型。

看下面例子:

var a = "myobject";
a.name = "myname";
console.log(a.name); // undefined 

顯示String無(wú)法當(dāng)作一個(gè)對(duì)象來(lái)處理。實(shí)際上,javascript里的String是不可以改變的,javascript也沒(méi)有提供任何一個(gè)改變字符串的方法和語(yǔ)法。

var a = "myobject";
a = a.substring(3,5)
console.log(a); // bj 

記住這樣做,就沒(méi)有改變String字符串"myobject",只a引用了另一個(gè)字符串"bj","myobject"被回收了。

所以可以這樣講,String實(shí)際上并不符合上面兩種數(shù)據(jù)類(lèi)型分類(lèi)。它是具有兩方面屬性介于兩都之間的一種特殊類(lèi)型。

相關(guān)文章

  • js實(shí)現(xiàn)前端圖片上傳即時(shí)預(yù)覽功能

    js實(shí)現(xiàn)前端圖片上傳即時(shí)預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)前端圖片即時(shí)預(yù)覽功能,本地預(yù)覽功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • js帶前后翻頁(yè)的圖片切換效果代碼分享

    js帶前后翻頁(yè)的圖片切換效果代碼分享

    這篇文章主要介紹了js帶前后翻頁(yè)的圖片切換效果,圖片切換效果特別適合做產(chǎn)品展示,感興趣的小伙伴可以參考下。
    2015-09-09
  • js中延遲加載和預(yù)加載的具體使用

    js中延遲加載和預(yù)加載的具體使用

    這篇文章主要介紹了js中延遲加載和預(yù)加載的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 前端終止請(qǐng)求的3種方式總結(jié)(ajax、axios)

    前端終止請(qǐng)求的3種方式總結(jié)(ajax、axios)

    這篇文章主要給大家總結(jié)介紹了關(guān)于前端終止請(qǐng)求的3種方式,其中包括ajax、axios的相關(guān)資料, 取消請(qǐng)求在前端有時(shí)候會(huì)用到,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • javascript發(fā)表評(píng)論或者留言時(shí)的展開(kāi)效果

    javascript發(fā)表評(píng)論或者留言時(shí)的展開(kāi)效果

    javascript發(fā)表評(píng)論或者留言時(shí)的展開(kāi)效果...
    2007-07-07
  • taro 實(shí)現(xiàn)購(gòu)物車(chē)邏輯的實(shí)例代碼

    taro 實(shí)現(xiàn)購(gòu)物車(chē)邏輯的實(shí)例代碼

    這篇文章主要介紹了taro 實(shí)現(xiàn)購(gòu)物車(chē)邏輯,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • ECharts事件處理與旭日?qǐng)D實(shí)現(xiàn)

    ECharts事件處理與旭日?qǐng)D實(shí)現(xiàn)

    這篇文章介紹了ECharts事件處理與實(shí)現(xiàn)旭日?qǐng)D的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • layer更改皮膚的實(shí)現(xiàn)方法

    layer更改皮膚的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇layer更改皮膚的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • 詳解小程序緩存插件(mrc)

    詳解小程序緩存插件(mrc)

    這篇文章主要介紹了詳解小程序緩存插件(mrc),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • js中arguments,caller,callee,apply的用法小結(jié)

    js中arguments,caller,callee,apply的用法小結(jié)

    本篇文章只要是對(duì)js中arguments,caller,callee,apply的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01

最新評(píng)論