js 關於運算順序的問題

2022-07-25 09:27:11 字數 1320 閱讀 3745

先介紹涉及到的概念

表示式: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...