W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
此規(guī)則可幫助你定位由變量漏寫、參數(shù)名漏寫和意外的隱式全局變量聲明所導(dǎo)致的潛在引用錯誤(比如,在 for 循環(huán)語句中初始化變量忘寫 var 關(guān)鍵字)。
檢查因運算符優(yōu)先級錯誤引起的問題,禁止對關(guān)系運算符的左操作數(shù)使用否定操作符。比如 !(key in object)
錯寫成 !key in object
來判斷 Key 值是否在對象中。類似的代碼還有 !obj instanceof Ctor
。
分包內(nèi)不可以引用其他分包的資源,如圖片/js 等。
檢查 axml 內(nèi)的視圖組件是否綁定了未在 js 中定義的事件處理函數(shù)。
樣式文件 acss 中不支持屬性選擇器,例如: input[type="button"]{...}
、[title=Story]{}
。
acss 文件里的本地資源引用請使用絕對路徑的方式,不支持相對路徑引用。
key 不能設(shè)置在 block 上。
示例:不支持 <block key={{...}}></block>
。
通過 getApp()
獲取實例后,請勿私自調(diào)用生命周期回調(diào)函數(shù)。
數(shù)據(jù)綁定使用 Mustache 語法將遍量用兩隊大括號({{}})封裝,組件屬性需要用雙引號封裝。
boolean 類型關(guān)鍵字,需要用引號,雙括號封裝,當(dāng)成對象處理。
App()
函數(shù)中不可以調(diào)用 getApp()
,可使用 this
可以獲取當(dāng)前小程序?qū)嵗?/p>
禁止把保留字用作模塊名。
保留字有:globalThis、global、AlipayJSBridge、fetch、self、window、document、location、XMLHttpRequest。
檢查是否有 setInterval 但是未 clearInterval 的場景。
驗證 my.navigateTo / my.redirectTo 等方法調(diào)用時,url 參數(shù)是否在 app.json 中有定義。
頁面中如果使用了 web-view 標(biāo)簽,但未配置 H5 域名。
頁面中如果使用了 httpRequest 進(jìn)行接口請求,但沒有添加請求的鏈接,則請求會被攔截,也將導(dǎo)致小程序被駁回。
使用代碼掃描手段進(jìn)行白屏檢測, 查找內(nèi)容可能為空的 Page 避免小程序出現(xiàn)白屏, 影響體驗。
在 JavaScript 中,NaN
是 Number
類型的一個特殊值。它被用來表示非數(shù)值,在 JavaScript 中 NaN
不等于任何值,包括它本身,因此,應(yīng)使用 Number.isNaN()
或 全局的 isNaN()
函數(shù)來檢測一個值是否是非數(shù)值。
調(diào)用未授權(quán)的 JSAPI, 例如 my.getLocation
, 可能引起程序異常。調(diào)用前,請確認(rèn)已申請對應(yīng)的 API 調(diào)用權(quán)限。
JavaScript 會暫停 try
和 catch
語句塊中的控制流語句,直到 finally
執(zhí)行完畢,因此當(dāng) finally
中有 return
、throw
、break
和 continue
時, try
和 catch
語句塊中的控制流語句將被覆蓋,這可能會導(dǎo)致非預(yù)期的結(jié)果。
因為 return
、throw
、continue
和 break
語句無條件地退出代碼塊,其之后的任何語句都不會被執(zhí)行。不可達(dá)語句通常是個錯誤。
在創(chuàng)建包含變量或表達(dá)式的模版字符串時,很容易將 ` 錯寫為 `"` ,例如: `"${variable}"` ,正確的代碼為
${variable}``。
正則表達(dá)式使用多個空格時,例如 var re = /first name/
,很難直觀的理解其中的空格數(shù)量,最好只使用指定數(shù)量的方式書寫正則表達(dá)式,例如:var re = /first {2}name/
;可以很清晰的理解為匹配 2 個空格。
ECMAScript 提供了幾個全局對象,旨在直接調(diào)用。這些對象由于是大寫的(比如 Math
和 JSON
)看起來像是構(gòu)造函數(shù),但是如果你嘗試像函數(shù)一樣執(zhí)行它們,將會拋出錯誤。
在正則表達(dá)式字面量中無效的模式在代碼解析時會引起 SyntaxError
,但是 RegExp
的構(gòu)造函數(shù)中無效的字符串只在代碼執(zhí)行時才會拋出 SyntaxError
,因此禁止在 RegExp
構(gòu)造函數(shù)中出現(xiàn)無效的正則表達(dá)式。
JavaScript 函數(shù)有兩種形式:函數(shù)聲明 function foo() { ... }
或者函數(shù)表達(dá)式 var foo = function() { ... }
。雖然 JavaScript 解釋器可以容忍對函數(shù)聲明進(jìn)行覆蓋或重新賦值,但通常這是個錯誤或會導(dǎo)致問題出現(xiàn)。
在 try
語句中的 catch
子句中,如果意外地(或故意地)給異常參數(shù)賦值,是不可能引用那個位置的錯誤的。由于沒有 arguments
對象提供額外的方式訪問這個異常,對它進(jìn)行賦值絕對是毀滅性的,因此,禁止對 catch 子句中的異常重新賦值。
在正則表達(dá)式中空字符集不能匹配任何字符,因此,正則表達(dá)式中不應(yīng)出現(xiàn)空字符集。
在對象中,如果出現(xiàn)多個屬性有同樣的 key,可能會導(dǎo)致獲取到非預(yù)期的屬性值。
如果在一個函數(shù)定義中出現(xiàn)多個同名的參數(shù),后面出現(xiàn)的會覆蓋前面出現(xiàn)的參數(shù),導(dǎo)致非預(yù)期的情況發(fā)生。
在 ASCII 中,0-31 范圍內(nèi)的控制字符是特殊的、不可見的字符。這些字符很少被用在 JavaScript 字符串中,所以一個正則表達(dá)式如果包含這些字符的,很有可能一個錯誤。
將一個常量表達(dá)式/常量值作為一個條件表達(dá)式有可能是代碼編寫錯誤,不建議使用靜態(tài)值作為條件。
在條件語句中,很容易將一個比較運算符( ==
)錯寫成賦值運算符( =
),因此不建議在 if
、for
、while
和 do...while
使用復(fù)制運算符。
請不要把 data 中任何一項的 value 設(shè)為 undefined ,否則這一項將不被設(shè)置并可能遺留一些潛在問題。
直接修改 this.data
,無法改變頁面的狀態(tài),還會造成數(shù)據(jù)不一致的問題。
使用即將廢棄或已廢棄的接口,可能會導(dǎo)致小程序運行異常。一般情況下,廢棄的接口不會立即移除,但保險起見,建議不要使用廢棄的 API,以避免小程序后續(xù)突然運行異常。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: