成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript優(yōu)先級(jí)與結(jié)合性

FleyX / 3040人閱讀

摘要:首先處理因?yàn)殛P(guān)系運(yùn)算符優(yōu)先于邏輯運(yùn)算符。在關(guān)系運(yùn)算符兩側(cè)的和作為數(shù)值參加關(guān)系運(yùn)算,的值為?,F(xiàn)在的左側(cè)為,右側(cè)為運(yùn)算符,而運(yùn)算符優(yōu)先于,應(yīng)先進(jìn)行由于的級(jí)別最高,因此先進(jìn)行,得到結(jié)果。此時(shí)是對(duì)整個(gè)右邊的值求值,則,優(yōu)先級(jí)高于,則。

這次討論一下JavaScript運(yùn)算符的結(jié)合性和優(yōu)先級(jí)問題 相關(guān)知識(shí)鏈接:MDN運(yùn)算符優(yōu)先級(jí),jingxian:淺談JS運(yùn)算符&&和|| 及其優(yōu)先級(jí)

來源一篇知乎上的問題:JavaScript中運(yùn)算符優(yōu)先級(jí)的問題

這是知友樂已生悲回答的答案:

        var a = 0;
        console.log(
            5 > 3 && 8 < 4 + (a = 5)
        )

表達(dá)式“5 > 3 && 8 < 4 + (a = 5)”自左向右掃描。首先處理“5 > 3”(因?yàn)殛P(guān)系運(yùn)算符“>”優(yōu)先于邏輯運(yùn)算符“&&”)。在關(guān)系運(yùn)算符“>”兩側(cè)的5 和 3 作為數(shù)值參加關(guān)系運(yùn)算,“5>3”的值為true。再進(jìn)行“true && 8 < 4 + (a = 5)”的運(yùn)算,“&&”左邊為true,則進(jìn)行它右邊表達(dá)式的運(yùn)算。8的左側(cè)為“&&”,右側(cè)為“<”運(yùn)算符,根據(jù)優(yōu)先規(guī)則,應(yīng)先進(jìn)行“<”的運(yùn)算,即先進(jìn)行“8 < 4 + (a = 5)”的運(yùn)算。現(xiàn)在4的左側(cè)為“<”,右側(cè)為“+”運(yùn)算符,而“+”運(yùn)算符優(yōu)先于“<”,應(yīng)先進(jìn)行“4 + (a = 5)”,由于“()”的級(jí)別最高,因此先進(jìn)行“a=5”,得到結(jié)果5。然后進(jìn)行“4 + 5”的運(yùn)算,得到結(jié)果9,再進(jìn)行“8 < 9”的運(yùn)算,得到true,最后進(jìn)行“true && true”,得到true。(這個(gè)例子是模仿《c程序設(shè)計(jì)》第四版94頁(yè)的例子)

作者:樂己生悲
鏈接:https://www.zhihu.com/questio...
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

我在變換一下幾個(gè)式子,試著求值。

        5 > 3 && 8 < 4 + (a = 5);
        
        false && 8 < 4 + 3        // false : 由于AND操作符左邊的運(yùn)算為false,短路,直接返回false
        
        5 > 2 || 2 > 4 && 3 > 2    
        // true : 依次從左向右運(yùn)算,5>2:true,則 true || 2 > 4 && 3 > 2。由于OR操作符左邊的運(yùn)算為真,短路,直接返回OR左邊的值。右邊表達(dá)式全部忽略;
        
        1 > 2 || 0 && 3 > 2    
        // 0:從左至右,OR表達(dá)式為左結(jié)合,則1>2:false,則false || 0 && 3 > 2。此時(shí)是對(duì)OR整個(gè)右邊的值求值,則0 && 3 > 2,>優(yōu)先級(jí)高于AND,則3>2:true。
        // 此時(shí)則為0 && true,AND為左結(jié)合,先對(duì)左邊求值,求值為0,直接返回0,此時(shí)最后才是false || 0,OR運(yùn)算符為左結(jié)合,左邊求值false,則直接返回右值0。
        // 看來的確是對(duì)的-0-,我是邊分析最后才console,萬(wàn)一錯(cuò)了,上面的思路都編程瞎掰的了......
        
        var a = 5;
        0 || 6 > a++ && 50 > (3+2)*2
        console.log(a);
        // 依舊從左至右,后面我會(huì)用函數(shù)來證明,JavaScript執(zhí)行語(yǔ)句大多數(shù)情況上到下,左到右。優(yōu)先級(jí)是根據(jù)結(jié)合性來判斷的,并不是單純的誰(shuí)優(yōu)先誰(shuí)就先算
        
        // 對(duì)OR左邊求值,為0,則繼續(xù)對(duì)右邊求值,即6 > a++ && 50 > (3+2)*1,依舊從左至右。a++是后置自增,后置運(yùn)算無結(jié)合性。則會(huì)先使用a后自增,此時(shí)相當(dāng)于
        // (6 > 5)++,運(yùn)算進(jìn)行到AND,依舊是左結(jié)合,左邊的運(yùn)算已經(jīng)為true,則直接對(duì)右邊繼續(xù)求值,即50 > (3+2)*2,大括號(hào)優(yōu)先級(jí)最高,先加法后乘法,則(3+2)*2:10
        // 最后才是50 > 10,結(jié)果為true,則AND返回的是右邊表達(dá)式的值:true。最后最后得出true。
        // console我對(duì)了,可以試試把AND右邊整體的值換成1,再次console應(yīng)該是:1。
        // a:6
        
        
        var x = 5;
        var y = 3+2*x++;
        alert(y+" | "+x)    // y的值是13還是15? 是13
        // 從左至右,此時(shí)遇上的運(yùn)算符有+、*、后置自增。則應(yīng)考慮優(yōu)先級(jí),即(3 + (2 * (x)))++
        // 沒錯(cuò),自增是最后才進(jìn)行的。具體可以看segmentfault里JS表達(dá)式語(yǔ)句4.6.4
        // 計(jì)算2*5之后,與3相加,最后賦值給y,做完這些,x才自增,這就是后置遞增遞減運(yùn)算符的特性。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82852.html

相關(guān)文章

  • JavaScript程序設(shè)計(jì)》—— 第二章 編程

    摘要:變量名必須以字母美元符號(hào)下劃線開始,只能包含字母數(shù)字下劃線和美元符號(hào)。你有元現(xiàn)在是第年小練習(xí)計(jì)算從和增長(zhǎng)到自身的倍需要的次數(shù)。 2.3 程序的構(gòu)成 表達(dá)式,用于計(jì)算并得到值; 變量,用于保存數(shù)據(jù),以便將來使用; 語(yǔ)句,用于執(zhí)行腳本的操作; 2.3.1 表達(dá)式 2 2+8.1+5 (2+8.1)* 5 9>4 9>4 && 1===2 dog+house Hello.length ...

    sean 評(píng)論0 收藏0
  • 由ES規(guī)范學(xué)JavaScript(二):深入理解“連等賦值”問題

    摘要:有這樣一個(gè)熱門問題其實(shí)這個(gè)問題很好理解,關(guān)鍵要弄清下面兩個(gè)知識(shí)點(diǎn)引擎對(duì)賦值表達(dá)式的處理過程賦值運(yùn)算的右結(jié)合性一賦值表達(dá)式形如的表達(dá)式稱為賦值表達(dá)式。賦值表達(dá)式是右結(jié)合的。 有這樣一個(gè)熱門問題: var a = {n: 1}; var b = a; a.x = a = {n: 2}; alert(a.x); // --> undefined alert(b.x); // --> {n: ...

    JasonZhang 評(píng)論0 收藏0
  • 基于JavaScript求解八數(shù)碼最短路徑并生成動(dòng)畫效果

    摘要:寫在最前本次分享一下通過廣度優(yōu)先搜索解決八數(shù)碼問題并展示其最短路徑的動(dòng)畫效果。一個(gè)排列中逆序的總數(shù)就稱為這個(gè)排列的逆序數(shù)。如果起始狀態(tài)與結(jié)束狀態(tài)的逆序數(shù)的奇偶性相同,則說明狀態(tài)可達(dá),反之亦然。 寫在最前 本次分享一下通過廣度優(yōu)先搜索解決八數(shù)碼問題并展示其最短路徑的動(dòng)畫效果。 歡迎關(guān)注我的博客,不定期更新中—— 效果預(yù)覽 該效果為從[[2, 6, 3],[4, 8, 0],[7, 1, ...

    Jioby 評(píng)論0 收藏0
  • JavaScript程序設(shè)計(jì)》—— 第三章 數(shù)據(jù)章 總結(jié)及練習(xí)

    摘要:如果參數(shù)不在與之間,該方法將返回一個(gè)空字符串這個(gè)不解釋了方法用于在字符串中用一些字符替換另一些字符,或替換一個(gè)與正則表達(dá)式匹配的子串。 主要總結(jié) JavaScript的六種數(shù)據(jù)類型:Boolean、Number、String、Null、Undefined、Object 布爾類型 布爾真假判定:短路原則 x && y 只有在x和y都為真的情況下為真。即真真為真,短路:因比較運(yùn)算為左...

    W4n9Hu1 評(píng)論0 收藏0
  • C語(yǔ)言運(yùn)算符的優(yōu)先級(jí)結(jié)合詳細(xì)解說

    摘要:結(jié)合性當(dāng)一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符優(yōu)先級(jí)別相同時(shí),則按運(yùn)算符的結(jié)合性來確定表達(dá)式的運(yùn)算順序。大多數(shù)運(yùn)算符結(jié)合方向是左結(jié)合性,只有三類運(yùn)算符的結(jié)合方向是右結(jié)合性,即單目運(yùn)算符條件運(yùn)算符賦值運(yùn)算符。 C語(yǔ)言運(yùn)算符的優(yōu)先級(jí)和結(jié)合性詳細(xì)解說 優(yōu)先級(jí) 運(yùn)算符 含義 使用形式 結(jié)合性 操作數(shù) ...

    aristark 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<