優先級 運算類型 關聯性 運算符 19 圓括號 n/a ( … ) 18 成員訪問 從左到右 … . … 需計算的成員訪問 從左到右 … [ … ] new (帶參數列表) n/a new … ( … ) 17 函數調用 從左到右 … ( … ) new (無參數列表) 從右到左 new … 15 邏輯非 從右到左 ! … 一元加法 從右到左 + … 一元減法 從右到左 - … 前置遞增 從右到左 ++ … 前置遞減 從右到左 -- … typeof 從右到左 typeof … void 從右到左 void … delete 從右到左 delete … 14 乘法 從左到右 … * … 除法 從左到右 … / … 取模 從左到右 … % … 13 加法 從左到右 … + … 減法 從左到右 … - … 12 按位左移 從左到右 … << … 11 小於 從左到右 … < … 小於等於 從左到右 … <= … 大於 從左到右 … > … 大於等於 從左到右 … >= … in 從左到右 … in … instanceof 從左到右 … instanceof … 10 等號 從左到右 … == … 非等號 從左到右 … != … 全等號 從左到右 … === … 非全等號 從左到右 … !== … 9 按位與 從左到右 … & … 8 按位異或 從左到右 … ^ … 7 按位或 從左到右 … | … 6 邏輯與 從左到右 … && … 5 邏輯或 從左到右 … || … 4 條件運算符 從右到左 … ? … : … 3 賦值 從右到左 … = … … += … … -= … … *= … … /= … … %= … … &= … … ^= … … |= …
總結:函數
一、賦值操做排在全部的比較最後,(num == 1)裏的內用最優先運算。 二、成員訪問的優先級在,()運算以後,在其餘的運算以前。 三、函數的執行,在其餘比較和運算符以前以前。 四、判斷的優先級也在賦值 = 號的最前邊。 五、邏輯與 和 邏輯或 要在左右兩邊的運算完成之後,在進行 邏輯與 和 邏輯或 比較。
var obj = 1==1; // console.log(obj); var obj2 = 1>2; var obj3 = 3*2; var obj4 = !1 == 0; // 先運算 !1(1的取反),而後再和 == 0 ,進行比較,把比較的結果值賦給obj4 // 特殊例子 var i = 0; var obj5 = ++i; // 前置型遞增,就是將i的值i自己再進行相加,而後再賦值給obj5 var obj6 = i++;// 後置型遞增,就是將i的值先賦值給obj5,而後i自己再進行相加 console.log(obj6); // 函數運算的優先級 var objOne = { name: 'zhaoxuan', method:(function () { return function () { this.method = 1; return 'fn是一個字符串' } })() }; // 函數運算執行的優先級,在賦值以前,先進行自執行函數運算,而後再把自執行函數運算的返回值,賦值給obj.method屬性。 var fn = objOne.method(); console.log(fn); // 這裏也是,objOne.method();函數的運算優先,先將函數進行運算,而後再把返回值給fn,fn如今的值就是字符串‘fn是一個字符串’ // 邏輯與 和 邏輯或 // 邏輯與 比 邏輯或的優先級高。 console.log(1 && 2 || 0); // 先進行 1&&2 運算,而後拿 1&&2的運算結果 2和0進行邏輯或運算 ,也就是(2 || 0)。 console.log(1 && true || 0);// true console.log(1 && 0 || 3 && 1 && true); // 邏輯與,兩個條件都成立,返回結果纔是true var num1 = 2; var num2 = true; if (num1 && num2) { console.log('這纔是成立的'); } var num3 = false; if (num1 && num3) { console.log('這是不成立的,因此不打印'); } // true && false,第一個ture成立則返回第二個,若是,第一個不成立 false&&false,則直接返回第一個 console.log(false && true); // 邏輯或 兩個或者多個條件其中一個成立,則返回成立true if( 1==1 || 2==0) { console.log('這種或就成立的,由於1==1成立了'); } // 若是兩個都不成立,則就返回false if( 1==3 || 2== 3) { console.log('由於兩個都不成立,因此這裏面的不打印'); }