2016年1月6日 星期三

[筆記] 談談JavaScript的Precedence和Associativity

圖片來源:JavaScript 101
在JavaScript中,當我們執行一串指令的過程中,JavaScript必須要決定先執行哪一個部分,還有就是應該要由右至左還是由左至右執行。

例如,一個很簡單的算式3*5+4/2,對於小學有畢業的人來說,大部分的人都知道先乘除後加減的概念,所以很容易就可以算出答案是17。


然而,在程式語言的世界中,我們同樣也必須要為它製訂一套規則,來決定到底哪個部分要先執行,其中我們透過將不同的運算子賦予不同的Precedence來決定哪一個部分要先執行,當兩個運算子的Precedence都一樣的時候,我們就要進一步決定,那麼應該要由左至右判讀,還是由右至左判讀,這個部分則是透過Associativity來決定。

在Mozilla的網站中,即整理了關於JavaScript 中Precedence和Associativity的表,從中可以看到precedence越高的項目會越先執行,但當precedence一樣的時候,則會透過accociativity來決定。

Mozilla Operator precedence


範例




一般來說,我們都知道再計算"4 + 5 - 7 "的時候要由右至左運算,而不是由左至右運算,所以我們很自然的就會得到 a = 2的答案。

可是,如果我們是計算b = c = d呢?到底最後b會等於2還是等於4呢?

我們到剛剛Mozilla Operator precedence的網站可以看到,等號是屬於"Assignment",當它們都具有相同的precedence時,它的associativity是"right-to-left"。


所以,它實際上運作的邏輯是這樣的,所以不論b, c或d,答案都會變成4:


了解JavaScript中的Precedence和Associativty了嗎?


→回到此系列文章目錄

資料來源

Share:

0 意見:

張貼留言