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