js中變量的連續(xù)賦值(實(shí)例講解)
今天遇到了一個(gè)連續(xù)賦值的經(jīng)典案例,網(wǎng)友們給出的答案也是五花八門,看起來(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ù)賦值,即:變量賦值的類型是數(shù)據(jù)類型值
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è)引用類型值,請(qǐng)記得變量賦值為引用類型值的時(shí)候,通過變量改變這個(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}
//再回到我代碼中的第一句話,這個(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的二次賦值,并沒有影響b,b還是對(duì)象{n:1},但是由于a在重新賦值之前,給{n:1}這個(gè)對(duì)象,增加了一個(gè)x屬性,因此,這時(shí)的b已經(jīng)有了x屬性
console.log(a.x);//{n:2}對(duì)象沒有x屬性,所以結(jié)果是undefined
console.log(b.x);//綜上所述,這個(gè)結(jié)果是{n:2}
以上這篇js中變量的連續(xù)賦值(實(shí)例講解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用 JavaScript 創(chuàng)建并下載文件(模擬點(diǎn)擊)
本文將介紹如何使用 JavaScript 創(chuàng)建文件,并自動(dòng)/手動(dòng)將文件下載,這在導(dǎo)出原始數(shù)據(jù)時(shí)會(huì)比較方便2019-10-10
JavaScript中的reduce方法執(zhí)行過程、使用場(chǎng)景及進(jìn)階用法
這篇文章主要介紹了JavaScript中的reduce方法執(zhí)行過程、使用場(chǎng)景及進(jìn)階用法的相關(guān)資料,reduce是JavaScript中用于累積計(jì)算數(shù)組元素的重要方法,它接受一個(gè)回調(diào)函數(shù)和一個(gè)初始值,返回一個(gè)計(jì)算結(jié)果,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02
JavaScript深拷貝與淺拷貝實(shí)現(xiàn)詳解
深拷貝和淺拷貝是面試中經(jīng)常出現(xiàn)的,主要考察對(duì)基本類型和引用類型的理解深度,這篇文章主要給大家介紹了關(guān)于js深拷貝和淺拷貝的相關(guān)資料,需要的朋友可以參考下2022-11-11
谷歌瀏覽器 insertCell與appendChild的區(qū)別
table中增加單元格時(shí) 在谷歌瀏覽器中使用insertCell方法增加列時(shí),顯示結(jié)果的先后順序與程序執(zhí)行的先后順序相反2009-02-02
服務(wù)端渲染nextjs項(xiàng)目接入經(jīng)驗(yàn)總結(jié)分析
這篇文章主要為大家介紹了服務(wù)端渲染nextjs項(xiàng)目接入經(jīng)驗(yàn)總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
javascript實(shí)現(xiàn)blob加密視頻源地址的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)blob加密視頻源地址的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08

