亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

js中變量的連續(xù)賦值(實(shí)例講解)

 更新時(shí)間:2017年07月08日 08:00:22   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇js中變量的連續(xù)賦值(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

今天遇到了一個(gè)連續(xù)賦值的經(jīng)典案例,網(wǎng)友們給出的答案也是五花八門(mén),看起來(lái)有些繁瑣,我也來(lái)說(shuō)說(shuō)自己的看法。

下面就是這個(gè)經(jīng)典案例:

var a = {n: 1};
var b = a;
a.x = a = {n: 2};

console.log(a);
console.log(b);
console.log(a.x);
console.log(b.x);

我們先來(lái)看一下普通連續(xù)賦值,即:變量賦值的類(lèi)型是數(shù)據(jù)類(lèi)型值

var a=3;
var b=a=5;
console.log(a);
console.log(b);

一般來(lái)說(shuō),等號(hào)賦值的方向是從右至左,那么上面的代碼等同于下面這段代碼,那么我們就用下面這段代碼來(lái)解釋上面的代碼:

var a=3;  //全局變量a被賦值為3
var a=5;  //此時(shí)a被重新賦值為5
var b=a;  //將a的值賦給全局變量b
console.log(a);//a最終的值就是第二次被賦的值:5
console.log(b);//按照代碼執(zhí)行順序b的值也是:5

上面的小案例用來(lái)拋磚引玉,現(xiàn)在我們來(lái)分析這個(gè)經(jīng)典案例:

var a = {n: 1};//a第一次被賦值,是一個(gè)引用類(lèi)型值,請(qǐng)記得變量賦值為引用類(lèi)型值的時(shí)候,通過(guò)變量改變這個(gè)對(duì)象的時(shí)候,對(duì)象本身也發(fā)生了變化
var b = a;//b被賦值為a,因此b就是對(duì)象{n:1}

a.x = a = {n: 2};
//這個(gè)賦值與之前的簡(jiǎn)單案例有所不同,a.x指的是給a添加一個(gè)x屬性,在js的運(yùn)算中“.”和"="運(yùn)算符同時(shí)出現(xiàn),會(huì)先執(zhí)行"."運(yùn)算
//因此,賦值順序被改變了,是先給a.x賦值,再給a賦值
//就是先執(zhí)行:a.x={n:2},注意這里a并未改變,是給a的x屬性賦值為{n:2},a還是{n:1}
//再回到我代碼中的第一句話(huà),這個(gè)賦值行為,改變了{(lán)n:1}這個(gè)對(duì)象,即給它增加了名為x的屬性
//再執(zhí)行a={n:2},這是變量a不再是對(duì)象{n:1},而被重新賦值為一個(gè)新的對(duì)象{n:2};

console.log(a);//自然此時(shí)a是對(duì)象{n:2}
console.log(b);//a的二次賦值,并沒(méi)有影響b,b還是對(duì)象{n:1},但是由于a在重新賦值之前,給{n:1}這個(gè)對(duì)象,增加了一個(gè)x屬性,因此,這時(shí)的b已經(jīng)有了x屬性
console.log(a.x);//{n:2}對(duì)象沒(méi)有x屬性,所以結(jié)果是undefined
console.log(b.x);//綜上所述,這個(gè)結(jié)果是{n:2}

以上這篇js中變量的連續(xù)賦值(實(shí)例講解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論