更新时间:2023-07-28 17:42:30收藏订阅更新我的文档设置返回文档以下不同问题等级可能会导致小程序被驳回或有驳回风险,开发者需要根据相关等级提示进行对应优化。审检测不通过审核将驳回1. jsapi 调用权限检查调用未授权的 jsapi, 例如 my.getlocation, 可能引起程序异常。调用前,请确认已申请对应的 api 调用权限。2. 禁用未声明的变量此规则可帮助开发者定位由变量漏写、参数名漏写和意外的隐式全局变量声明所导致的潜在引用错误(例如,在 for 循环语句中初始化变量忘写 var 关键字)。3. 在 in instanceof 两种关系操作符左侧表达式,不要用否定判断,运算符优先级检查因运算符优先级错误引起的问题,禁止对关系运算符的左操作数使用否定操作符。例如 !(key in object) 错写成 !key in object 来判断 key 值是否在对象中。类似的代码还有 !obj instanceof ctor。4. 对象中有重复的 key在对象中,如果出现多个属性有同样的 key,可能会导致获取到非预期的属性值。5. 方法中有重复参数如果在一个函数定义中出现多个同名的参数,后面出现的会覆盖前面出现的参数,导致非预期的情况发生。6. 不可跨分包访问资源分包内不可以引用其它分包的资源,如图片、js 等。7. 组件绑定了未定义的事件函数检查 axml 内的视图组件是否绑定了未在 js 中定义的事件处理函数。8. acss 样式不支持属性选择器样式文件 acss 中不支持属性选择器,例如: input[type="button"]{...}、[title=story]{}。9. acss 内本地资源引用不支持相对路径acss 文件里的本地资源引用请使用绝对路径的方式,不支持引用相对路径。10. 不应直接调用 app 生命周期函数通过 getapp() 获取实例后,请勿私自调用生命周期回调函数。11. 数据绑定双大括号检查数据绑定使用 mustache 语法将变量用两对大括号 {{}} 封装,组件属性需要用双引号封装。12. boolean 类型关键字需要引号/双大括号封装boolean 类型关键字,需要用引号,双括号封装,当成对象处理。13. app() 内不可调用 getapp()app() 函数中不可以调用 getapp(),可使用 this 可以获取当前小程序实例。14. 禁止把保留字用作模块名禁止把保留字用作模块名。保留字有:globalthis、global、alipayjsbridge、fetch、self、window、document、location、xmlhttprequest。15. 计时器未释放检查是否有 setinterval 但是未 clearinterval 的场景。16. 页面地址有效性验证 my.navigateto、my.redirectto 等方法调用时,url 参数是否在 app.json 中有定义。有驳回风险1. web-view 请求域名检查页面中如果使用了 web-view 标签,但未配置 h5 域名,则会导致页面无法跳转,详情可查看 web-view 页面域名未配置驳回案例。2. 网络请求域名检查页面中如果使用了 httprequest 进行接口请求,但没有添加请求的链接,则请求会被拦截,也将导致小程序被驳回,详情可查看 httprequest未配置驳回案例。3. 无效页面检测加载一个没有内容的页面,没有实际业务意义,而且会影响用户体验,建议移除。4. 应使用 isnan 进行 not-a-number 判断在 javascript 中,nan 是 number 类型的一个特殊值。它被用来表示非数值,在 javascript 中 nan 不等于任何值,包括它本身,因此,应使用 number.isnan() 或 全局的 isnan() 函数来检测一个值是否为非数值。5. 不要在 finally 中使用部分控制流语句javascript 会暂停 try 和 catch 语句块中的控制流语句,直到 finally 执行完毕,因此当 finally 中有 return、throw、break 和 continue 时, try 和 catch 语句块中的控制流语句将被覆盖,这可能会导致非预期的结果。6. 可能无法执行到的逻辑因为 return、throw、continue 和 break 语句无条件地退出代码块,其之后的任何语句都不会被执行。不可达语句通常是个错误。7. 字符串模块语法有误,需要反引号在创建包含变量或表达式的模板字符串时,很容易将 错写为 " ,例如: "${variable}" ,正确的代码为${variable}`。8. 检查正则表达式中,是否有连续空格正则表达式使用多个空格时,例如 var re = /first name/ ,很难直观的理解其中的空格数量,最好只使用指定数量的方式书写正则表达式,例如:var re = /first {2}name/ ;可以很清晰的理解为匹配 2 个空格。9. 某些全局对象,不能被当做方法访问ecmascript 提供了几个全局对象,旨在直接调用。这些对象由于是大写的(例如 math 和 json)看起来像是构造函数,但是如果尝试像函数一样执行它们,将会抛出错误。10. 正则表达式语法错误在正则表达式字面量中无效的模式在代码解析时会引起 syntaxerror,但是 regexp 的构造函数中无效的字符串只在代码执行时才会抛出 syntaxerror,因此禁止在 regexp 构造函数中出现无效的正则表达式。11. 可能存在覆盖的方法申明javascript 函数有两种形式:函数声明 function foo() { ... } 或者函数表达式 var foo = function() { ... } 。虽然 javascript 解释器可以容忍对函数声明进行覆盖或重新赋值,但通常这个错误或会导致问题出现。12. 改写了 try catch 的异常值在 try 语句中的 catch 子句中,如果意外地(或故意地)给异常参数赋值,是不可能引用那个位置的错误的。由于没有 arguments 对象提供额外的方式访问这个异常,对它进行赋值绝对是毁灭性的,因此,禁止对 catch 子句中的异常重新赋值。13. 正则中有可能为空的字符条件在正则表达式中空字符集不能匹配任何字符,因此,正则表达式中不应出现空字符集。14. 错误使用 = 作为条件判断在条件语句中,很容易将一个比较运算符( ==)错写成赋值运算符( =),因此不建议在 if、for、while 和 do...while 使用复制运算符。15. 不应设置 data 的子项为 undefined请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。16. 废弃 api 调用检查检查是否有调用已废弃的 api。建议改进正则中不能使用部分字符 ascii range 0-31 control characters在 ascii 中,0-31 范围内的控制字符是特殊的、不可见的字符。这些字符很少被用在 javascript 字符串中,所以一个正则表达式如果包含这些字符,很有可能是一个错误。