支付寶小程序 靜態(tài)掃描評測規(guī)范

2020-09-16 15:52 更新

1. 禁用未聲明的變量

此規(guī)則可幫助你定位由變量漏寫、參數(shù)名漏寫和意外的隱式全局變量聲明所導(dǎo)致的潛在引用錯誤(比如,在 for 循環(huán)語句中初始化變量忘寫 var 關(guān)鍵字)。

2. 在 in instanceof 兩種關(guān)系操作符 左側(cè)表達(dá)式,不要用否定判斷,運算符優(yōu)先級

檢查因運算符優(yōu)先級錯誤引起的問題,禁止對關(guān)系運算符的左操作數(shù)使用否定操作符。比如 !(key in object) 錯寫成 !key in object 來判斷 Key 值是否在對象中。類似的代碼還有 !obj instanceof Ctor。

3. 不可跨分包訪問資源

分包內(nèi)不可以引用其他分包的資源,如圖片/js 等。

4. 組件綁定了未定義的事件函數(shù)

檢查 axml 內(nèi)的視圖組件是否綁定了未在 js 中定義的事件處理函數(shù)。

5. acss 樣式不支持屬性選擇器

樣式文件 acss 中不支持屬性選擇器,例如: input[type="button"]{...}、[title=Story]{}。

6. acss 內(nèi)本地資源引用不支持相對路徑

acss 文件里的本地資源引用請使用絕對路徑的方式,不支持相對路徑引用。

7. key 不能設(shè)置在 block 上

key 不能設(shè)置在 block 上。

示例:不支持 <block key={{...}}></block>。

8. 不應(yīng)直接調(diào)用 APP 生命周期函數(shù)

通過 getApp() 獲取實例后,請勿私自調(diào)用生命周期回調(diào)函數(shù)。

9. 數(shù)據(jù)綁定雙大括號檢查

數(shù)據(jù)綁定使用 Mustache 語法將遍量用兩隊大括號({{}})封裝,組件屬性需要用雙引號封裝。

10. Boolean 類型關(guān)鍵字需要引號/雙大括號封裝

boolean 類型關(guān)鍵字,需要用引號,雙括號封裝,當(dāng)成對象處理。

11. App() 內(nèi)不可調(diào)用 getApp()

App() 函數(shù)中不可以調(diào)用 getApp(),可使用 this 可以獲取當(dāng)前小程序?qū)嵗?/p>

12. 禁止把保留字用作模塊名

禁止把保留字用作模塊名。

保留字有:globalThis、global、AlipayJSBridge、fetch、self、window、document、location、XMLHttpRequest。

13. 計時器未釋放

檢查是否有 setInterval 但是未 clearInterval 的場景。

14. 頁面地址有效性

驗證 my.navigateTo / my.redirectTo 等方法調(diào)用時,url 參數(shù)是否在 app.json 中有定義。

15. web-view 請求域名檢查

頁面中如果使用了 web-view 標(biāo)簽,但未配置 H5 域名。

16. 網(wǎng)絡(luò)請求域名檢查

頁面中如果使用了 httpRequest 進(jìn)行接口請求,但沒有添加請求的鏈接,則請求會被攔截,也將導(dǎo)致小程序被駁回。

17. 白屏檢測-頁面組件為空

使用代碼掃描手段進(jìn)行白屏檢測, 查找內(nèi)容可能為空的 Page 避免小程序出現(xiàn)白屏, 影響體驗。

18. 應(yīng)使用 isNaN 進(jìn)行 not-a-number 判斷

在 JavaScript 中,NaNNumber 類型的一個特殊值。它被用來表示非數(shù)值,在 JavaScript 中 NaN 不等于任何值,包括它本身,因此,應(yīng)使用 Number.isNaN() 或 全局的 isNaN() 函數(shù)來檢測一個值是否是非數(shù)值。

19. JSAPI 調(diào)用權(quán)限檢查

調(diào)用未授權(quán)的 JSAPI, 例如 my.getLocation, 可能引起程序異常。調(diào)用前,請確認(rèn)已申請對應(yīng)的 API 調(diào)用權(quán)限。

20. 不要在 finally 中使用部分控制流語句

JavaScript 會暫停 trycatch 語句塊中的控制流語句,直到 finally 執(zhí)行完畢,因此當(dāng) finally 中有 return、throwbreakcontinue 時, trycatch 語句塊中的控制流語句將被覆蓋,這可能會導(dǎo)致非預(yù)期的結(jié)果。

21. 可能無法執(zhí)行到的邏輯

因為 return、throw、continuebreak 語句無條件地退出代碼塊,其之后的任何語句都不會被執(zhí)行。不可達(dá)語句通常是個錯誤。

22. 字符串模塊語法有誤,需要反引號

在創(chuàng)建包含變量或表達(dá)式的模版字符串時,很容易將 ` 錯寫為 `"` ,例如: `"${variable}"` ,正確的代碼為${variable}``。

23. 檢查正則表達(dá)式中,是否有連續(xù)的空格

正則表達(dá)式使用多個空格時,例如 var re = /first name/ ,很難直觀的理解其中的空格數(shù)量,最好只使用指定數(shù)量的方式書寫正則表達(dá)式,例如:var re = /first {2}name/ ;可以很清晰的理解為匹配 2 個空格。

24. 某些全局對象,不能被當(dāng)做方法訪問

ECMAScript 提供了幾個全局對象,旨在直接調(diào)用。這些對象由于是大寫的(比如 MathJSON)看起來像是構(gòu)造函數(shù),但是如果你嘗試像函數(shù)一樣執(zhí)行它們,將會拋出錯誤。

25. 正則表達(dá)式語法錯誤

在正則表達(dá)式字面量中無效的模式在代碼解析時會引起 SyntaxError,但是 RegExp 的構(gòu)造函數(shù)中無效的字符串只在代碼執(zhí)行時才會拋出 SyntaxError,因此禁止在 RegExp 構(gòu)造函數(shù)中出現(xiàn)無效的正則表達(dá)式。

26. 可能存在覆蓋的方法申明

JavaScript 函數(shù)有兩種形式:函數(shù)聲明 function foo() { ... } 或者函數(shù)表達(dá)式 var foo = function() { ... } 。雖然 JavaScript 解釋器可以容忍對函數(shù)聲明進(jìn)行覆蓋或重新賦值,但通常這是個錯誤或會導(dǎo)致問題出現(xiàn)。

27. 改寫了 try catch 的異常值

try 語句中的 catch 子句中,如果意外地(或故意地)給異常參數(shù)賦值,是不可能引用那個位置的錯誤的。由于沒有 arguments 對象提供額外的方式訪問這個異常,對它進(jìn)行賦值絕對是毀滅性的,因此,禁止對 catch 子句中的異常重新賦值。

28. 正則中有可能為空的字符條件

在正則表達(dá)式中空字符集不能匹配任何字符,因此,正則表達(dá)式中不應(yīng)出現(xiàn)空字符集。

29. 對象中有重復(fù)的 key

在對象中,如果出現(xiàn)多個屬性有同樣的 key,可能會導(dǎo)致獲取到非預(yù)期的屬性值。

30. 方法中有重復(fù)參數(shù)

如果在一個函數(shù)定義中出現(xiàn)多個同名的參數(shù),后面出現(xiàn)的會覆蓋前面出現(xiàn)的參數(shù),導(dǎo)致非預(yù)期的情況發(fā)生。

31. 正則中不能使用部分字符 ASCII range 0-31 control characters

在 ASCII 中,0-31 范圍內(nèi)的控制字符是特殊的、不可見的字符。這些字符很少被用在 JavaScript 字符串中,所以一個正則表達(dá)式如果包含這些字符的,很有可能一個錯誤。

32. 控制流條件可能有邏輯錯誤,成為一個靜態(tài)的條件

將一個常量表達(dá)式/常量值作為一個條件表達(dá)式有可能是代碼編寫錯誤,不建議使用靜態(tài)值作為條件。

33. 錯誤使用 = 作為條件判斷

在條件語句中,很容易將一個比較運算符( ==)錯寫成賦值運算符( =),因此不建議在 if、for、whiledo...while 使用復(fù)制運算符。

34. 不應(yīng)設(shè)置 data 的子項為 undefined

請不要把 data 中任何一項的 value 設(shè)為 undefined ,否則這一項將不被設(shè)置并可能遺留一些潛在問題。

35. 不建議直接修改 this.data

直接修改 this.data,無法改變頁面的狀態(tài),還會造成數(shù)據(jù)不一致的問題。

36. 廢棄 API 調(diào)用檢查

使用即將廢棄或已廢棄的接口,可能會導(dǎo)致小程序運行異常。一般情況下,廢棄的接口不會立即移除,但保險起見,建議不要使用廢棄的 API,以避免小程序后續(xù)突然運行異常。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號