欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

javascript的基本類(lèi)型和引用類(lèi)型的區(qū)別

1、可以感受到,JS 的變量及其松散,那么,正是 JS 變量松散 的本質(zhì),決定了:JS 變量名只是 一個(gè)在特定的時(shí)間用于保存特定值的一個(gè)名字 而已,也就是說(shuō),變量的值及其數(shù)據(jù)類(lèi)型可以在腳本的生命周期內(nèi)改變 ,盡管這個(gè)功能看起來(lái)有趣、強(qiáng)大,但是 JS 變量實(shí)際上是比較復(fù)雜。

洪江管理區(qū)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),洪江管理區(qū)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為洪江管理區(qū)上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的洪江管理區(qū)做網(wǎng)站的公司定做!

2、ECMAScirpt 變量有兩種不同的數(shù)據(jù)類(lèi)型:基本類(lèi)型 和 引用類(lèi)型,另外還有其他的叫法,比如:原始類(lèi)型和對(duì)象類(lèi)型、擁有方法的類(lèi)型和不能擁有方法的類(lèi)型 等/0

3、將一個(gè)值賦值給變量時(shí),解析器 必須確定這個(gè)值是基本類(lèi)型值還是引用類(lèi)型值

基本類(lèi)型 指的是簡(jiǎn)單的數(shù)據(jù)段,而 引用類(lèi)型 指的是可能由多個(gè)值構(gòu)成的對(duì)象

基本類(lèi)型:undefined、null、string、number、boolean、symbo(ES6)

引用類(lèi)型:Object、Array、RegExp、Date、Function

兩種類(lèi)型的區(qū)別

存儲(chǔ):

基本類(lèi)型的值是存放在 棧區(qū) 的,即內(nèi)存中的棧內(nèi)存

假如有以下變量:

var name = 'jozo';
var city = 'guangzhou';
var age = 22;

那么他們的存儲(chǔ)結(jié)構(gòu)如下:(棧區(qū)包括了變量的標(biāo)識(shí)符和值)

javascript的基本類(lèi)型和引用類(lèi)型的區(qū)別

引用類(lèi)型的值是同時(shí)保存在 棧內(nèi)存和堆內(nèi)存 的

假如有以下對(duì)象:

var person1 = {name:'jozo'};
var person2 = {name:'xiaom'};
var person3 = {name:'xiaoq'};

那么他們的存儲(chǔ)結(jié)構(gòu)如下:

javascript的基本類(lèi)型和引用類(lèi)型的區(qū)別

訪問(wèn):

基本類(lèi)型的值是 按值訪問(wèn) 的,因?yàn)榭梢圆僮鞅4嬖谧兞恐械膶?shí)際的值。

引用類(lèi)型的值是 按引用訪問(wèn) 的,因?yàn)橐妙?lèi)型的值是保存在內(nèi)存中的對(duì)象,而與其他語(yǔ)言不同的是,JavaScript 不允許直接訪問(wèn)內(nèi)存中的位置,即不可以直接操作對(duì)象的內(nèi)存空間,那么,在操作對(duì)象時(shí),實(shí)際上是在操作對(duì)象的引用而不是實(shí)際的對(duì)象。

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

對(duì)于引用類(lèi)型的值,很明顯,我們可以為其 添加、改變、刪除 屬性和方法:

var person = new Object();
person.name = "Ozzie";
console.log(person.name);    //"Ozzie"

上述過(guò)程中,我們創(chuàng)建了一個(gè)對(duì)象并為其添加了一個(gè)屬性,如果對(duì)象不被銷(xiāo)毀或者這個(gè)屬性不被刪除,那么這個(gè)屬性將一直存在

但是,我們不可以給基本類(lèi)型的值添加方法和屬性

var name = "Ozzie";
name.age = 19;
consoe.log(name.age);    //undefined

盡管這樣操作不會(huì)報(bào)錯(cuò),但是仍然會(huì)被默默地掛掉

比較:

基本類(lèi)型的比較是 值的比較 :

例如:

var a = 1;

var b = true;

console.log(a == b);    //true

引用類(lèi)型的比較是 引用的比較 :

例如:

var person1 = {};
var person2 = {};
console.log(person1 == person2);    //false

上文提到過(guò),引用類(lèi)型時(shí)按引用訪問(wèn)的,換句話說(shuō)就是比較兩個(gè)對(duì)象的堆內(nèi)存中的地址是否相同,很明顯,并不是同一個(gè)內(nèi)存位置:

javascript的基本類(lèi)型和引用類(lèi)型的區(qū)別

復(fù)制變量值:

將一個(gè)基本類(lèi)型的值復(fù)制給另一個(gè)變量,那么,會(huì)在新變量上創(chuàng)建一個(gè)新值,然后再把該值復(fù)制到為新變量分配的位置上:

例如:

var a = 10;
var b = a;
a++;
console.log(a);    // 11
console.log(b);    // 10

a 與 b 是完全獨(dú)立的,該值只是 a 中的值的一個(gè)副本。

基本類(lèi)型在賦值操作后,兩個(gè)變量是相互不受影響的:

javascript的基本類(lèi)型和引用類(lèi)型的區(qū)別

那么,復(fù)制引用類(lèi)型的值時(shí),同樣也會(huì)將一份存儲(chǔ)在對(duì)象中的值復(fù)制到新變量的空間中,不同的是,這個(gè)值的副本實(shí)際上是一個(gè) 指針,指向的是存儲(chǔ)在堆中的對(duì)象。也就是說(shuō),復(fù)制結(jié)束后,這兩個(gè)變量將引用同一個(gè)對(duì)象。

例如:

var a = {}; // a保存了一個(gè)空對(duì)象的實(shí)例
var b = a;  // a和b都指向了這個(gè)空對(duì)象
a.name = 'jozo';
console.log(a.name); // 'jozo'
console.log(b.name); // 'jozo'

改變其中一個(gè)變量就會(huì)影響到另一個(gè)變量

javascript的基本類(lèi)型和引用類(lèi)型的區(qū)別

傳遞參數(shù):

請(qǐng)記住,盡管在訪問(wèn)變量時(shí)有著按值訪問(wèn)和按引用訪問(wèn)這兩種方式,但 ECMAScript 中所有的函數(shù)的參數(shù)都是按值傳遞的,即參數(shù)只能按值傳遞,也就是說(shuō),把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就類(lèi)似于變量之間的值復(fù)制一樣

基本類(lèi)型的值的傳遞如同基本類(lèi)型的變量的復(fù)制,被傳遞的值會(huì)被賦值給一個(gè)局部變量(即命名參數(shù),用 ECMAScript 中的概念說(shuō),就是 arguments 對(duì)象中的一個(gè)元素),此處不再贅述…

但是向參數(shù)傳遞引用類(lèi)型的值時(shí),復(fù)制給局部變量的是 內(nèi)存中的地址,因此這個(gè)局部變量的變化會(huì)被反映在函數(shù)的外部。

例如:

function setName(obj){
      obj.name = "Ozzie";
}
var person = new Object();
setName(person);
console.log(person.name);    //"Ozzie"

我們可以看到,在函數(shù)內(nèi)部,obj 和 person 引用的是同一個(gè)對(duì)象,換句話說(shuō),即使這個(gè)變量是按值傳遞的,obj 也會(huì)按引用來(lái)訪問(wèn)同一個(gè)對(duì)象,因?yàn)?person 指向的對(duì)象在堆內(nèi)存中只有一個(gè),而且是全局對(duì)象。

很多人會(huì) 錯(cuò)誤地認(rèn)為:參數(shù)是按引用傳遞的,因?yàn)樵诰植孔饔糜蛑行薷牡膮?shù)會(huì)在全局作用域中反映出來(lái),OK,那么我們?cè)倏匆粋€(gè)例子:

function setName(obj){
      obj.name = "Ozzie";
      obj = new Object();
      obj.name = "Nicholas"
}
var person = new Object();
setName(person);
console.log(person.name);    //Ozzie

如果是按引用傳遞參數(shù)的,那么顯然 person 對(duì)象就會(huì)在函數(shù)內(nèi)部自動(dòng)修改 name 屬性為 Nicholas,但結(jié)果仍然是 Ozzie,這說(shuō)明,即使在函數(shù)內(nèi)部修改了參數(shù)的值,但原始的引用仍然保持不變,實(shí)際上,在函數(shù)內(nèi)部重寫(xiě) obj 時(shí),這個(gè)變量的引用就是一個(gè)局部對(duì)象了,而這個(gè)局部對(duì)象在函數(shù)執(zhí)行完畢后立即被銷(xiāo)毀。

以上就是JS 基本類(lèi)型與引用類(lèi)型值的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

標(biāo)題名稱(chēng):javascript的基本類(lèi)型和引用類(lèi)型的區(qū)別
網(wǎng)站地址:http://aaarwkj.com/article44/gdsiee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、定制網(wǎng)站、網(wǎng)站設(shè)計(jì)、App開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
亚洲欧美成人综合网站| 成人性生活视频免费中文版| 亚洲一区二区三区女同| 欧美一区二区三区四区久久 | 濑亚美莉在线观看一区二区三区| 久久精品少妇人妻视频| 黄色污网站在线观看免费| 日本美女激情在线观看| 日本在线观看免费高清| 日韩欧美一区二区三区不卡在线| 国产激情一区二区三区| 国产91日韩欧美在线| 欧美日韩综合在线第一页| 日本黄色中文字幕网站| 男女性生活视频成年人观看| 精品国产美女主播在线 | 欧美三级精品三级在线| 亚洲精品有码中文字幕| 永久永久免费黄色一级片| 欧美日韩加勒比综合在线| 久久久久久久精品久久| 欧美v日韩v亚洲综合国产高清| 日韩一区二区三区av| 欧美 成人一区二区三区| 国产亚洲香蕉精彩视频| 欧美中文字幕精在线不卡| 久久久国产精品9999综合| 日韩国产欧美亚洲一区| 日韩av在线高清播放| 国产熟女碰碰人人a久久| 国产午夜视频在线观看一区| 91深夜在线免费观看| 国产精品成人一区二区艾草| 中文字幕精品一区二区三区在线 | 日本熟女视频中文字幕| 精品啪在线观看国产熟女| 欧美成人夫妻性生活视频 | 久久国产亚洲精品赲碰热| 国产精品国产三级农村av| 欧美日韩亚洲激情一区| 国产精品麻豆一区二区三区|