摘要:首先處理因為關系運算符優先于邏輯運算符。在關系運算符兩側的和作為數值參加關系運算,的值為。現在的左側為,右側為運算符,而運算符優先于,應先進行由于的級別最高,因此先進行,得到結果。此時是對整個右邊的值求值,則,優先級高于,則。
這次討論一下JavaScript運算符的結合性和優先級問題 相關知識鏈接:MDN運算符優先級,jingxian:淺談JS運算符&&和|| 及其優先級
來源一篇知乎上的問題:JavaScript中運算符優先級的問題
這是知友樂已生悲回答的答案:
var a = 0; console.log( 5 > 3 && 8 < 4 + (a = 5) )
表達式“5 > 3 && 8 < 4 + (a = 5)”自左向右掃描。首先處理“5 > 3”(因為關系運算符“>”優先于邏輯運算符“&&”)。在關系運算符“>”兩側的5 和 3 作為數值參加關系運算,“5>3”的值為true。再進行“true && 8 < 4 + (a = 5)”的運算,“&&”左邊為true,則進行它右邊表達式的運算。8的左側為“&&”,右側為“<”運算符,根據優先規則,應先進行“<”的運算,即先進行“8 < 4 + (a = 5)”的運算。現在4的左側為“<”,右側為“+”運算符,而“+”運算符優先于“<”,應先進行“4 + (a = 5)”,由于“()”的級別最高,因此先進行“a=5”,得到結果5。然后進行“4 + 5”的運算,得到結果9,再進行“8 < 9”的運算,得到true,最后進行“true && true”,得到true。(這個例子是模仿《c程序設計》第四版94頁的例子)
作者:樂己生悲
鏈接:https://www.zhihu.com/questio...
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
我在變換一下幾個式子,試著求值。
5 > 3 && 8 < 4 + (a = 5); false && 8 < 4 + 3 // false : 由于AND操作符左邊的運算為false,短路,直接返回false 5 > 2 || 2 > 4 && 3 > 2 // true : 依次從左向右運算,5>2:true,則 true || 2 > 4 && 3 > 2。由于OR操作符左邊的運算為真,短路,直接返回OR左邊的值。右邊表達式全部忽略; 1 > 2 || 0 && 3 > 2 // 0:從左至右,OR表達式為左結合,則1>2:false,則false || 0 && 3 > 2。此時是對OR整個右邊的值求值,則0 && 3 > 2,>優先級高于AND,則3>2:true。 // 此時則為0 && true,AND為左結合,先對左邊求值,求值為0,直接返回0,此時最后才是false || 0,OR運算符為左結合,左邊求值false,則直接返回右值0。 // 看來的確是對的-0-,我是邊分析最后才console,萬一錯了,上面的思路都編程瞎掰的了...... var a = 5; 0 || 6 > a++ && 50 > (3+2)*2 console.log(a); // 依舊從左至右,后面我會用函數來證明,JavaScript執行語句大多數情況上到下,左到右。優先級是根據結合性來判斷的,并不是單純的誰優先誰就先算 // 對OR左邊求值,為0,則繼續對右邊求值,即6 > a++ && 50 > (3+2)*1,依舊從左至右。a++是后置自增,后置運算無結合性。則會先使用a后自增,此時相當于 // (6 > 5)++,運算進行到AND,依舊是左結合,左邊的運算已經為true,則直接對右邊繼續求值,即50 > (3+2)*2,大括號優先級最高,先加法后乘法,則(3+2)*2:10 // 最后才是50 > 10,結果為true,則AND返回的是右邊表達式的值:true。最后最后得出true。 // console我對了,可以試試把AND右邊整體的值換成1,再次console應該是:1。 // a:6 var x = 5; var y = 3+2*x++; alert(y+" | "+x) // y的值是13還是15? 是13 // 從左至右,此時遇上的運算符有+、*、后置自增。則應考慮優先級,即(3 + (2 * (x)))++ // 沒錯,自增是最后才進行的。具體可以看segmentfault里JS表達式語句4.6.4 // 計算2*5之后,與3相加,最后賦值給y,做完這些,x才自增,這就是后置遞增遞減運算符的特性。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/82852.html
摘要:變量名必須以字母美元符號下劃線開始,只能包含字母數字下劃線和美元符號。你有元現在是第年小練習計算從和增長到自身的倍需要的次數。 2.3 程序的構成 表達式,用于計算并得到值; 變量,用于保存數據,以便將來使用; 語句,用于執行腳本的操作; 2.3.1 表達式 2 2+8.1+5 (2+8.1)* 5 9>4 9>4 && 1===2 dog+house Hello.length ...
摘要:有這樣一個熱門問題其實這個問題很好理解,關鍵要弄清下面兩個知識點引擎對賦值表達式的處理過程賦值運算的右結合性一賦值表達式形如的表達式稱為賦值表達式。賦值表達式是右結合的。 有這樣一個熱門問題: var a = {n: 1}; var b = a; a.x = a = {n: 2}; alert(a.x); // --> undefined alert(b.x); // --> {n: ...
摘要:寫在最前本次分享一下通過廣度優先搜索解決八數碼問題并展示其最短路徑的動畫效果。一個排列中逆序的總數就稱為這個排列的逆序數。如果起始狀態與結束狀態的逆序數的奇偶性相同,則說明狀態可達,反之亦然。 寫在最前 本次分享一下通過廣度優先搜索解決八數碼問題并展示其最短路徑的動畫效果。 歡迎關注我的博客,不定期更新中—— 效果預覽 該效果為從[[2, 6, 3],[4, 8, 0],[7, 1, ...
摘要:如果參數不在與之間,該方法將返回一個空字符串這個不解釋了方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。 主要總結 JavaScript的六種數據類型:Boolean、Number、String、Null、Undefined、Object 布爾類型 布爾真假判定:短路原則 x && y 只有在x和y都為真的情況下為真。即真真為真,短路:因比較運算為左...
摘要:結合性當一個運算對象兩側的運算符優先級別相同時,則按運算符的結合性來確定表達式的運算順序。大多數運算符結合方向是左結合性,只有三類運算符的結合方向是右結合性,即單目運算符條件運算符賦值運算符。 C語言運算符的優先級和結合性詳細解說 優先級 運算符 含義 使用形式 結合性 操作數 ...
閱讀 1065·2021-11-24 09:39
閱讀 3602·2021-11-22 13:54
閱讀 2560·2021-10-11 10:59
閱讀 800·2021-09-02 15:40
閱讀 1036·2019-08-30 15:55
閱讀 1056·2019-08-30 13:57
閱讀 2315·2019-08-30 13:17
閱讀 3035·2019-08-29 18:32