圖片來源:JavaScript 101 |
例如,一個很簡單的算式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了嗎?
→回到此系列文章目錄
0 意見:
張貼留言