先介紹涉及到的概念
表示式:js中的短語,直譯器在遇到表示式時,會將短語進行計算,然後再參與到運算中,表示式即js中的短語。
j所有的s**都是由操作符和表示式組成的,因此除了操作符,其他的都是js中的表示式。
如1 + 1 這段**中,+是操作符,前面的1和後面的1都是表示式。
表示式的分類:
原始表示式:常量(如π)、變數、直接量(數字、字串、正規表示式)、關鍵字
初始化表示式:初始化物件和初始化陣列
函式定義表示式:
函式呼叫表示式:
屬性訪問表示式:
物件建立表示式:使用new操作符建立函式
優先順序:
優先順序由高至低順序:屬性訪問、一元操作符、乘除、加減、比較(<,>等)、判斷相等(==,===,!==,!=)、與、或、三目運算、賦值運算
總結:屬性訪問表示式擁有最高優先順序,其次是以操作符(new也屬於一元操作符),優先順序最低的是賦值運算。
例子:
var a = 3;++a == 3;//false
上面的例子的結果是數值還是布林型別,取決於運算的優先順序,如果先進行判斷a == 3,然後再執行++操作,那麼結果是 a = 2,如果是先執行++運算,再判斷a == 3,結果是false.
結和性:(優先順序相同時看結合性)
分為左結合和右結合,
js中遵循右結合的有:一元操作符、三目運算、賦值運算,
其他所有都是遵循左結合的。
例子:
var a = 3;!a++;
上面的例子中有兩個操作符,乙個是!,另乙個是++,這兩個都是一元操作符,如果從左至右進行計算,那結果是1;但是一元操作符是遵循右結合的,也就是說這個語句會先進行a++運算,然後再對a進行取非運算,結果是false.
再來乙個例子:
x = a ? b : c ? d : e ? f : g
我看到的時候是很懵的,雖然應該不會有人這麼寫,但是這種寫法是可以存在的,所以我們也要知道是怎麼執行的,三目運算也是右結合性的,所以上面的例子等價於:x = a ? b : (c ? d : (e ? f : g ))
最後是運算順序:
js中的表示式包含表示式時,運算順序是從左至右。
var a = 1;b = a++ + a;
var a = 1;b = a++ + ++a;
猜猜上面兩個例子中執行後a和b分別等於什麼
js中關於連續的賦值運算子的執行順序問題
這個問題就得牽扯到一道比較經典的面試題了 請問下面,a,b輸出什麼 var a var b a a.x a 其實最後也可以再新增兩個問題 就是 a.x和b.x 分別輸出什麼 下面吧答案公布一下吧 a b 通過a,b的輸出結果看 a.x就是undefined b.x則是 這個是怎麼回事呢 其實 關鍵的...
關於js執行順序的總結
背景 最近在做管理專案的時候,由於頁面業務比較多,呼叫方法比較多。就經常出現同步非同步的問題,在方法中套用方法,資料的各種渲染等問題接踵而至,遇到多了,感覺需要總結一下。參考資料 新增鏈結描述 總結如下 js是單執行緒,始終是等到乙個方法執行完後再執行下乙個方法。那麼這個執行順序就相當的重要了。1 ...
關於樣式載入順序,js載入順序
對於大型 樣式表,js檔案有多個,這時載入順序有講究 以京東為例 對於js 先載入全域性配置,然後載入當前頁面配置 先載入base v1.js,再載入當前頁面配置 window.pageconfig 為啥要把pageconfig定義為乙個屬性,而不是單獨定義乙個變數,因為如果用乙個未定義的屬性時會i...