2016-07-26 53 views
-2

下面的代碼爲什麼eval()會拋出未定義的變量?

console.log("1",eval(undefined)); 
console.log("2",eval(window.UndefVar)); 
console.log("3",eval(UndefVar)); 

產生以下輸出

1 undefined 
2 undefined 
UndefVar is not defined 

也許IDK一些內部工作,但扔只有在不確定的變量,而忽略性能&未定義本身似乎不可思議,即使是在同一個Chrome瀏覽器,這導致我認爲它以某種方式在規範中設置。

+0

'eval'在這裏不相關。 –

+1

這樣的代碼*沒有*'eval()'也會拋出異常。 – Pointy

回答

2

undefined是一個名稱,其值爲undefined。 window是一個對象,您可以動態地將名稱分配給對象,但嘗試訪問未設置的對象時,將返回未定義的對象。此外,名稱UndefVar未定義,因此在調用eval之前將拋出ReferenceError,因爲它必須先評估參數。

+0

'window.UndefVar'與'UndefVar'相同。儘管它以不同的方式訪問,但我不清楚它爲什麼會給出不同的結果。 – ZeroUnderscoreOu

+0

@ ZeroUnderscoreOu對未定義對象屬性的引用不是運行時錯誤。對未定義*變量*的引用是。這只是語言的工作方式。 – Pointy

相關問題