在 EMCAScript 相關(guān)語言構(gòu)造被求值之時,實現(xiàn)報告大部分錯誤。早期的錯誤是一種可以檢測和優(yōu)先報告程序中所有錯誤內(nèi)任何構(gòu)造的求值問題。具體實現(xiàn)一定要在一個程序首次執(zhí)行評估時報告早期錯誤。早期錯誤在 eval 被調(diào)用時報告 eval 錯誤代碼,但是在 eval 代碼內(nèi)之優(yōu)先評估任意構(gòu)造。
一個實現(xiàn)要處理任意實例中的以下幾種誤差作為早期錯誤 :
- 任意語法錯誤
- 試圖定義一個有多個相同名字的 get 屬性設(shè)置或有多個相同名字的 set 屬性設(shè)置的 對象字面量
- 試圖定義一個數(shù)據(jù)屬性設(shè)置并且 get 或 set 具有相同的名稱屬性設(shè)置的 對象字面量
- 錯誤在正則表達(dá)式字面量中沒有實現(xiàn)語法擴展
- 試圖在嚴(yán)格代碼模式下定義一個有多個相同名稱屬性設(shè)置數(shù)據(jù)的 對象字面量
- with 語句在嚴(yán)格代碼模式下出現(xiàn)
- 在嚴(yán)格模式下的函數(shù)定義或函數(shù)表達(dá)的參數(shù)列表內(nèi)不止一次出現(xiàn)標(biāo)識符值的情況
- 使用 return, break 和 continue 不當(dāng)
- 試圖在早期已經(jīng)確定為非引用的任意值上調(diào)用 PutValue(例如,執(zhí)行賦值語句 3 = 4)
一個實現(xiàn)不應(yīng)過早處理其他種類的錯誤,即使編譯器可以證實某一構(gòu)造會在任何情況下產(chǎn)生執(zhí)行錯誤。
一個實現(xiàn)應(yīng)報告所有的指定錯誤,但以下情況除外:
- 實現(xiàn)可以擴展程序語法和正則表達(dá)式或標(biāo)志語法。使用此功能,當(dāng)它們遇到一個實現(xiàn)程序語法定義擴展或正則表達(dá)式或標(biāo)記語法時,所有操作(如調(diào)用 eval,使用正則表達(dá)式字面,或使用 Function 或 RegExp 構(gòu)造)被獲準(zhǔn)展現(xiàn)實現(xiàn)定義擴展的行為,而非拋出 SyntaxError 。
- 一個實現(xiàn)可以提供超出本規(guī)范中所描述的功能范圍外的類型,值,對象,屬性。這可能會導(dǎo)致構(gòu)造(如尋找一個在全局作用域內(nèi)的變量)實現(xiàn)定義的行為而非拋出一個錯誤(如 ReferenceError)。
- 當(dāng)在 fractionDigits 或 precision 參數(shù)是在指定的范圍之外,一個實現(xiàn)可以為 toFixed, toExponential, 和 toPrecision 定義 RangeError 以外的其他行為。
更多建議: