最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript引用類型和基本類型詳解

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

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

基本類型簡單的說就是簡單的數(shù)據(jù)段。

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

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

兩種訪問方式:

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

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

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

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

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

代碼實(shí)例如下:

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

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

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

圖示如下:

棧內(nèi)存


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

在javascript中,引用類型數(shù)據(jù)存儲(chǔ)在堆內(nèi)存中,但是不可以直接訪問堆內(nèi)存空間中的位置和操作堆內(nèi)存空間。
只能通過操作對(duì)象的在棧內(nèi)存中的引用地址。所以引用類型的數(shù)據(jù),在棧內(nèi)存中保存的實(shí)際上是對(duì)象在堆內(nèi)存中的引用地址。通過這個(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è)引用類型數(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ù)類型

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

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

看下面例子:

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

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

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

看下面例子:

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

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

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

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

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

相關(guān)文章

  • js獲取和設(shè)置屬性的方法

    js獲取和設(shè)置屬性的方法

    本篇文章主要是對(duì)js獲取和設(shè)置屬性的方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • echarts圖表設(shè)置寬度100%結(jié)果為100px的解決辦法

    echarts圖表設(shè)置寬度100%結(jié)果為100px的解決辦法

    在開發(fā)一個(gè)前端項(xiàng)目時(shí)需要用到Element-ui的el-tabs組件和Echart開源庫,當(dāng)兩者嵌套使用時(shí),我給Echart中的圖表寬度設(shè)置為了100%,但是實(shí)際的寬度卻只有100px,這篇文章主要給大家介紹了關(guān)于echarts圖表設(shè)置寬度100%結(jié)果為100px的解決辦法,需要的朋友可以參考下
    2022-12-12
  • 基于javascript實(shí)現(xiàn)移動(dòng)端輪播圖效果

    基于javascript實(shí)現(xiàn)移動(dòng)端輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了基于javascript實(shí)現(xiàn)移動(dòng)端輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • JavaScript從0開始構(gòu)思表情插件

    JavaScript從0開始構(gòu)思表情插件

    在項(xiàng)目開發(fā)階段很多項(xiàng)目都會(huì)用到表情插件,接下來通過本文給大家介紹了JavaScript從0開始構(gòu)思表情插件 的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • JS SetInterval 代碼實(shí)現(xiàn)頁面輪詢

    JS SetInterval 代碼實(shí)現(xiàn)頁面輪詢

    setInterval 是一個(gè)實(shí)現(xiàn)定時(shí)調(diào)用的函數(shù),可按照指定的周期(以毫秒計(jì))來調(diào)用函數(shù)或計(jì)算表達(dá)式。下面通過本文給大家分享JS SetInterval 代碼實(shí)現(xiàn)頁面輪詢,感興趣的朋友一起看看吧
    2017-08-08
  • JavaScript實(shí)現(xiàn)動(dòng)態(tài)留言板

    JavaScript實(shí)現(xiàn)動(dòng)態(tài)留言板

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)留言板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • javascript之解決IE下不渲染的bug

    javascript之解決IE下不渲染的bug

    javascript之解決IE下不渲染的bug...
    2007-06-06
  • JS利用prototype給類添加方法操作詳解

    JS利用prototype給類添加方法操作詳解

    這篇文章主要介紹了JS利用prototype給類添加方法操作,結(jié)合實(shí)例形式分析了javascript使用prototype實(shí)現(xiàn)給類添加方法的相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • D3.js實(shí)現(xiàn)餅狀圖的方法詳解

    D3.js實(shí)現(xiàn)餅狀圖的方法詳解

    相信大家都知道圖表是數(shù)據(jù)圖形化的表示,通過形象的圖表來展示數(shù)據(jù),比如條形圖,折線圖,餅圖等??梢暬瘓D表可以幫助開發(fā)者更容易理解復(fù)雜的數(shù)據(jù),提高生產(chǎn)的效率和Web應(yīng)用和項(xiàng)目的可靠性?,F(xiàn)在就讓我們大家一起來學(xué)習(xí)用D3.js來實(shí)現(xiàn)餅圖的方法,有需要的可以參考借鑒。
    2016-09-09
  • javascript創(chuàng)建函數(shù)的20種方式匯總

    javascript創(chuàng)建函數(shù)的20種方式匯總

    這篇文章主要介紹了javascript創(chuàng)建函數(shù)的20種方式匯總的相關(guān)資料,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

观塘区| 平陆县| 新民市| 昌吉市| 潢川县| 同江市| 河源市| 巴林右旗| 南汇区| 宁海县| 阿荣旗| 阳东县| 朝阳县| 荔波县| 绵阳市| 房山区| 马鞍山市| 安多县| 凤翔县| 郎溪县| 丹棱县| 疏勒县| 珲春市| 吉水县| 壶关县| 聊城市| 正镶白旗| 连城县| 汶上县| 北碚区| 中方县| 宁阳县| 北票市| 黔南| 绵竹市| 灵璧县| 嘉祥县| 博湖县| 新泰市| 合水县| 赣州市|