2013-10-04 58 views
0

鑑於已定義的全局變量exists和變量notexists,哪裏有哪些ReferenceError被拋出並且不被拋出的詳盡列表是什麼?到目前爲止,我有是爲:什麼是ReferenceError可能引發的所有可能的地方?

notexists; 
notexists++; 

在哪裏,他們都甩不特殊情況也很好奇,例如:

var notexists = notexists; //equivalent to: var notexists; notexists = notexists; 
typeof notexists; //special case? 

我錯過了什麼嗎?理由:我正在寫一個靜態分析器,我必須完全覆蓋所有這些情況。

+0

看JSHint是怎麼做的? –

回答

0

編輯此答案以作出詳盡的列表。

是:

notexists; 
notexists++; 
notexists.whatever; 
void notexists; 
notexists(); 

號:

notexists = exists; 
var notexists = notexists; 
typeof notexists; 
delete notexists; 
+2

未定義的屬性訪問器將始終引發一個引用錯誤。這與使用的操作員無關。 '例如,刪除notexists vs刪除notexists.whatever# –

+0

@DanHeberden:實際上,'刪除notexists'會正常工作,但'刪除notexists.whatever'會拋出'ReferenceError' – Claudiu

+0

我不認爲「是」列表會是非常有用的,它往往變得非常大。 「否」列表基本上由'typeof notexists'和'delete notexists'組成。其他情況不同,第一個是吊裝,最後一個是物業訪問。你是否根據規範的產品解析代碼?如果你仔細閱讀規範,你會發現拋出錯誤的情況並不是很多。此外,你必須考慮範圍鏈和提升。 – bfavaretto