2012-03-10 44 views
3

我玩弄eval,發現它可以在Chrome,Firefox和Opera評估非字符串:爲什麼`eval`在非字符串上工作?

eval(Array) === Array; // true 
eval(this) === this; // true 
eval(4 * 3/2) === 6; // true 

這是一個標準的行爲嗎?它記錄在任何地方嗎?除了字符串參數之外,我找不到任何提及的eval

如果這不是一個標準的行爲,有人可以識別主機環境,這工作?

回答

5

如果沒有字符串,則代碼已經在較低級別進行了評估,即在傳遞給eval之前(例如,您的最後一條語句正在執行eval(6))。任何功能都是如此。這就是JavaScript代碼的評估方式。 eval在這個意義上並不神奇,因爲它只是一個「只」接受一個參數的函數。

1.如果Type(x)不是字符串,返回x

是表情傳遞不是字符串在the specification描述的,當什麼eval應該返回。

+0

是的,我剛剛發現。我不知道'eval'就是這樣工作的。 – 2012-03-10 17:22:11

+0

+1你擊敗了我。還想提一提的是,如果x不是字符串,它只會返回x – MMM 2012-03-10 17:24:47

+0

我不認爲有任何理由實際*使用像這樣的''eval',是嗎? – 2012-03-10 17:29:48

相關問題