2015-02-05 126 views
-4

當我給出下面的語句時,輸出顯示爲-200。eval函數 - 評估順序

誰能幫我弄清楚究竟裏面的eval發生()

alert(eval(5-5*5+"5 + 5"));

+0

它並不複雜。只需按照聲明的每個部分逐一關注運算符優先級即可。 (並運行它沒有eval的線索) – Quentin 2015-02-05 12:58:03

+1

你試過運行'5-5 * 5 +「5 + 5」'看看它創建了什麼字符串? – apsillers 2015-02-05 12:58:16

+0

它創建了-205 + 5以及它如何生成-205? @apillers – Karthikeyan 2015-02-05 13:02:29

回答

5

有兩個步驟:一個字符串由你看到的操作計算,然後該字符串evaled。

什麼你evaling是

5-5*5+"5 + 5" 

其結果是

(5 - (5*5)) + "5 + 5" 

這是

-20 + "5 + 5" 

這裏有一個稍微棘手的部分:adding a number and a string is done via string concatenation所以這個結果操作是

"-20" + "5 + 5" 

這給

"-205 + 5" 

然後該字符串evaled,這給-200

+0

爲什麼它正在打印-205。評估如何發生? – Karthikeyan 2015-02-05 13:01:02

+0

非常感謝@dystroy! – Karthikeyan 2015-02-05 13:03:52