2012-07-13 144 views
1

這裏如果意外的結果與

document.write(eval("(2 == 2)")); 

它打印真正

而且

document.write(eval("(2 == 2)&(5<10)")); 

它打印
爲什麼不總是返回true或false 。如果條件增加,則它給出0或1.什麼是w可以得到相同類型的結果。

+0

由於問題實際上與'eval'無關,我冒昧地修改了標題,以便其他人在遇到同樣的問題時可以找到它。 – 2012-07-13 10:33:05

+0

謝謝T.J. Crowder糾正我和回答。 – 2012-07-13 10:38:44

回答

1

它打印1因爲你使用的按位與運算符(&),而不是邏輯和操作員(&&)。

而且,因爲JavaScript是弱類型它將把布爾值true1 int值,您可以通過調用

document.write(eval("(2 == 2)+(5<10)")); 

檢查結果將是

2 
5

因爲&不是邏輯運算符,所以它是bitwise (numeric) operator。你的意思可能是&&logical AND operator

請注意,在代碼示例中沒有理由使用eval。 (幾乎有從來沒有任何理由使用eval,在這種情況下幾乎總是有更好的替代  —,你甚至不需要替代品。)刪除它將有完全相同的結果。

1

&是一個按位運算符並返回一個數字。嘗試"(2 == 2)&&(5<10)"