js中運(yùn)算符優(yōu)先級(jí)問題

其實(shí)事情是這樣的,最近看到不少朋友討論一道據(jù)說不知道哪兒的筆試題目,題目如下:

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

請(qǐng)寫出a.x的值。

當(dāng)然通過運(yùn)行,大家很快找到答案undefined。

說實(shí)話這道題似乎難住了不少人,在問題還沒解決時(shí),突然有人喊了一句a = a.x = {n:2}結(jié)果也是一樣耶,此時(shí)大家都是一臉懵逼的狀態(tài)。

這個(gè)其實(shí)很好理解,a.x = a = {n:2}這個(gè)包括兩個(gè)過程,一是“解析”(其實(shí)是“.”操作符的優(yōu)先級(jí)要高于賦值),然后賦值;

用圖表示如下:

1)開始時(shí)


a、b指向同一對(duì)象


2)解析時(shí)


3)賦值時(shí)

看到這里大家是不是明白了,什么沒看懂?那你的疑問是不是還停留在“解析”時(shí)的狀態(tài)?其實(shí)js對(duì)象添加屬性包括兩個(gè)過程,"解析"和"賦值",上面也說了,這個(gè)“解析”呢,其實(shí)就是‘.’操作符的優(yōu)先級(jí)要高于賦值,這兩個(gè)過程的執(zhí)行方向剛好相反,“解析”從左到右進(jìn)行,賦值則從右到左,而且“解析”的過程在賦值之前,也就是說,如var obj = {};obj.name='zhangsan';這個(gè)過程其實(shí)是先“解析”,為對(duì)象{}添加一個(gè)值為undefined的屬性name,即obj.name-->{name: undefined};然后進(jìn)行賦值,即將'zhangsan'賦值給其name屬性,最終對(duì)象obj指向{name:zhangsan}。

到目前為止,加上上面三幅圖,大家對(duì)這個(gè)問題還有疑問嗎?

注:本文僅作為學(xué)習(xí)過程中的簡(jiǎn)單記錄和分享,如有問題請(qǐng)?zhí)岢霾⒅附?,共同進(jìn)步。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容