没有合适的资源?快使用搜索试试~ 我知道了~
首页sonar-Web_JavaScript检查规则指南.docx
sonar-Web_JavaScript检查规则指南.docx
需积分: 45 15 下载量 74 浏览量
更新于2023-03-03
评论
收藏 61KB DOCX 举报
SonarQube分析web端项目,遵循的基本内置规则;规则为常用激活规则,含bug、漏洞、坏味道三方面不同程度(严重、阻断、主要、次要、提示等级别)。
资源详情
资源评论
资源推荐
1
1
bug
bug
类型
类型
1.1
1.1
"delete" should be used only with object properties
"delete" should be used only with object properties
bug 次要
delete 运算符的语义有些棘手,只能可靠地用于从对象中删除属性。 将其他任何内容
传递给它,您可能会或可能不会获得预期的结果。
1.2
1.2
"in" should not be used with primitive types
"in" should not be used with primitive types
bug 严重
in 运算符测试指定的属性是否在指定的对象中。
如果右操作数是原始类型的 a(即不是对象),则 in 运算符将引发 TypeError。
1.3
1.3
"NaN" should not be used in comparisons
"NaN" should not be used in comparisons
bug 主要
NaN 不等于任何东西,甚至不等于任何东西。 对 NaN 进行相等性或不相等性测试将
产生可预测的结果,但可能不是您想要的结果。
相反,查看变量是否等于 NaN 的最好方法是使用自 ES2015 起的 Number.isNaN(),
或(也许是违反直觉的)将其与自身进行比较。 由于 NaN!== NaN,因此当 a!== a 时,
它必须等于 NaN。
1.4
1.4
"new" operators should be used with functions
"new" operators should be used with functions
bug 主要
new 关键字仅应与定义构造函数的对象一起使用。 将其与其他任何东西一起使用,您
将得到 TypeError,因为将没有构造函数来调用 new 关键字。
1.5
1.5
"super()" should be invoked appropriately
"super()" should be invoked appropriately
bug 严重
在某些情况下必须调用 super(),而在某些情况下不能调用 super()。
基本规则是:非派生类中的构造函数不能调用 super(); 派生类中的构造函数必须
调用 super()。
此外:
-必须先调用 super()才能使用 this 和 super 关键字。
-必须使用与基类的构造函数相同数量的参数来调用 super()。
-super()只能在构造函数中调用,而不能在任何其他方法中调用。
-不能在同一构造函数中多次调用 super()。
已知局限性
误报:如果未在与当前类相同的文件中定义基类,则不会引发某些问题。
1.6
1.6
"Symbol" should not be used as a constructor
"Symbol" should not be used as a constructor
bug 严重
Symbol 是 ECMAScript2015 中引入的原始类型。 它的实例主要用作唯一的属性键。
只能通过将 Symbol 用作函数来创建实例。 与 new 运算符一起使用 Symbol 会引发
TypeError。
1.7
1.7
"with" statements should not be used
"with" statements should not be used
bug 次要
使用 with 关键字会在 JavaScript 严格模式代码中产生错误。 但是,这并不是最糟糕
的。
使用 with 可以快速访问对象的属性-假设它们已经设置。 但是使用 with 来访问尚未在
对象中设置的某些属性,突然之间,您就跳出了对象范围,进入了全局范围,在那里创建
或覆盖了变量。 因为 with 的效果完全取决于传递给它的对象,所以 with 可能是不可预测
的危险,因此永远不要使用。
1.8
1.8
"yield" expressions should not be used outside
"yield" expressions should not be used outside
generators
generators
bug 阻断
yield 关键字在生成器函数中使用,以将 IteratorResult 返回给调用方。 它没有其他目
的,并且如果在此类函数之外找到,则会引发 ReferenceError,因为它随后被视为标识符。
1.9
1.9
A "for" loop update clause should move the counter in the
A "for" loop update clause should move the counter in the
right direction
right direction
bug 主要
永远无法达到停止条件的 for 循环(例如,计数器的方向错误)将无限运行。 尽管有
时会出现无限循环,但惯例是将此类循环构造为 while 循环。 更典型地,无限 for 循环是一
个错误。
1.10
1.10
All branches in a conditional structure should not have
All branches in a conditional structure should not have
exactly the same implementation
exactly the same implementation
bug 主要
如果所有分支都位于一个交换机中,或者如果链具有相同的实现,则是错误的。 要么
是复制粘贴错误,然后应该执行其他操作,要么根本不应该有 switch / if 链。 请注意,此
规则不适用于不带 else-s 的 if 链,或不带默认子句的 switch-es。
请注意,此规则要求 Node.js 在分析期间可用。
1.11
1.11
Array-mutating methods should not be used misleadingly
Array-mutating methods should not be used misleadingly
bug 主要
许多 JavaScript 的 Array 方法都返回更改后的版本,同时保持源数组完整无缺。 反向
和排序不属于此类别。 相反,他们除了返回修改后的版本外,还修改了源数组,这可能不
是预期的。
分配这些方法的返回值时,此规则会引起问题,这可能导致维护人员忽略原始值已更
改的事实。
1.12
1.12
Attempts should not be made to update "const" variables
Attempts should not be made to update "const" variables
bug 主要
用 const 声明的变量不能被修改。 不幸的是,尝试这样做并不总是会引发错误。 在非
ES2015 环境中,此类尝试可能会被忽略。
1.13
1.13
Bitwise operators should not be used in boolean contexts
Bitwise operators should not be used in boolean contexts
bug 主要
按位运算符&,| 可能会误认为布尔运算符&&和||。
当&或|时,此规则会引起问题。 在布尔上下文中使用。
1.14
1.14
Built-in objects should not be overridden
Built-in objects should not be overridden
bug 主要
覆盖对象会改变其行为,并可能影响使用该对象的所有代码。 因此,覆盖标准的内置
对象可能会对先前工作的代码产生广泛的潜在灾难性影响。
此规则检测以下本地对象的替代:
基 本 对 象 - 对 象 , 函 数 , 布 尔 值 , 符 号 , 错
误,EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIE
rror
数字和日期-数字,数学,日期
文本处理-字符串,RegExp
索 引 集 合 -
Array,Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Unit16Array,Int32Array
,Uint32Array,Float32Array,Float64Array
键控集合-地图,集合,WeakMap,WeakSet
结构化数据-ArrayBuffer,DataView,JSON
控制抽象对象-Promise
反射-反射,代理
国际化-国际
非标准对象-Generator,Iterator,ParallelArray,StopIteration
1.15
1.15
Callbacks of array methods should have return
Callbacks of array methods should have return
statements
statements
bug 阻断
JavaScript 中的数组有几种用于过滤,映射或折叠的方法,这些方法需要回调。 在这
样的回调函数中没有 return 语句很可能是一个错误。
此规则适用于数组的以下方法:
Array.from
Array.prototype.Every
Array.prototype.filter
Array.prototype.find
Array.prototype.findIndex
Array.prototype.map
Array.prototype.reduce
Array.prototype.reduceRight
Array.prototype.some
Array.prototype.sort
1.16
1.16
Calls should not be made to non-callable values
Calls should not be made to non-callable values
bug 主要
JavaScript 不是一种强类型语言,这一事实为开发人员提供了很大的自由度,但是如果
您对自由度过高的话,这种自由度将很危险。
具体来说,在语法上可以调用任何表达式,就好像它的值是一个函数一样。 但是,如
果这样做,可能会引发 TypeError。
1.17
1.17
Collection elements should not be replaced
Collection elements should not be replaced
unconditionally
unconditionally
bug 主要
当为键或索引保存值然后无条件覆盖时,这非常可疑。 这样的替换很可能是错误的。
请注意,此规则要求 Node.js 在分析期间可用。
1.18
1.18
Collection sizes and array length comparisons should
Collection sizes and array length comparisons should
make sense
make sense
bug 主要
集合的大小和数组的长度始终大于或等于零。 因此测试大小或长度大于或等于零是没
有意义的,因为结果始终为真。 类似地,测试它小于零将始终返回 false。 也许目的是检
查集合或数组的非空性。
1.19
1.19
Comma and logical OR operators should not be used in
Comma and logical OR operators should not be used in
switch cases
switch cases
bug 主要
逗号运算符(,)从左到右评估其操作数,并返回第二个。 在某些情况下这很有用,
但在切换情况下只是错误的。 您可能会认为您正在紧凑地处理这种情况下的多个值,但是
只会处理逗号列表中的最后一个值。 其余的将变为默认值。
同样,逻辑 OR 运算符(||)在切换情况下将不起作用,在执行时仅考虑第一个参数。
1.20
1.20
Conditionally executed blocks should be reachable
Conditionally executed blocks should be reachable
bug 主要
始终为 true 或 false 的条件表达式可能会导致代码失效。 这样的代码始终是错误的,永
远不要在生产中使用。
1.21
1.21
Destructuring patterns should not be empty
Destructuring patterns should not be empty
bug 主要
销毁是从存储在(可能是嵌套的)对象和数组中的数据中提取多个值的便捷方法。 但
是,可以创建一个无效的空模式。 在大多数情况下,当在属性名称的右边使用空的花括号
或方括号时,意图是使用默认值。
当使用空的解构模式时,此规则会引起问题。
1.22
1.22
Errors should not be created without being thrown
Errors should not be created without being thrown
bug 主要
在没有实际抛出错误的情况下创建新错误是没有用的,并且可能是由于错误所致。
1.23
1.23
Function argument names should be unique
Function argument names should be unique
bug 主要
函数参数都应使用不同的名称,以防止产生歧义。 实际上,如果参数具有相同的名
称,则最后一个重复的参数将隐藏所有具有相同名称的先前参数(这些先前参数可通过
arguments [i]保持可用,因此不是完全不可访问的)。
这种隐藏是没有意义的,降低了可理解性和可维护性,并且显然容易出错。 此外,在
严格模式下,声明具有相同名称的参数会产生错误。
1.24
1.24
Function calls should not pass extra arguments
Function calls should not pass extra arguments
bug 严重
您可以轻松地调用一个比函数需要更多参数的 JavaScript 函数,但是多余的参数只会
被函数执行忽略。
请注意,此规则要求 Node.js 在分析期间可用。
1.25
1.25
Generators should "yield" something
Generators should "yield" something
bug 主要
没有 yield 语句的生成器充其量是令人困惑的,而最糟糕的是代码中的错误,因为由代
码生成的迭代器将始终为空。
1.26
1.26
Identical expressions should not be used on both sides of
Identical expressions should not be used on both sides of
a binary operator
a binary operator
bug 主要
在二元运算符的两边使用相同的值几乎总是一个错误。 对于逻辑运算符,它或者是复
制/粘贴错误,因此是错误,或者仅仅是浪费的代码,应该简化。 在按位运算符和大多数
二进制数学运算符的情况下,在运算符的两边具有相同的值会产生可预测的结果,因此应
简化。
请注意,此规则要求 Node.js 在分析期间可用。
1.27
1.27
Jump statements should not be followed by dead code
Jump statements should not be followed by dead code
bug 主要
跳转语句(返回,中断和继续)和引发表达式将控制流移出当前代码块。 因此,跳转
后出现的所有语句都是无效代码。
1.28
1.28
Jump statements should not occur in "finally" blocks
Jump statements should not occur in "finally" blocks
bug 严重
使用 finally 块的 return,break,throw 和 continue 从覆盖的 try 和 catch 块覆盖类似的语
句。
当跳转语句(break,continue,return 和 throw)强制控制流离开 finally 块时,此规则
会引起问题。
1.29
1.29
Loops should not be infinite
Loops should not be infinite
bug 阻断
无限循环是指在程序运行时永远不会结束的循环,即,您必须终止程序才能退出循
环。 无论是通过满足循环的结束条件还是通过中断,每个循环都应具有结束条件。
已知局限性
误报:使用收益率时-问题#674。
误报:当循环内调用的函数引发异常时。
假阴性:当循环条件基于数组或对象的元素时。
1.30
1.30
Non-empty statements should change control flow or
Non-empty statements should change control flow or
have at least one side-effect
have at least one side-effect
bug 主要
剩余20页未读,继续阅读
yuan823
- 粉丝: 0
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 27页智慧街道信息化建设综合解决方案.pptx
- 计算机二级Ms-Office选择题汇总.doc
- 单链表的插入和删除实验报告 (2).docx
- 单链表的插入和删除实验报告.pdf
- 物联网智能终端项目设备管理方案.pdf
- 如何打造品牌的模式.doc
- 样式控制与页面布局.pdf
- 武汉理工Java实验报告(二).docx
- 2021线上新品消费趋势报告.pdf
- 第3章 Matlab中的矩阵及其运算.docx
- 基于Web的人力资源管理系统的必要性和可行性.doc
- 基于一阶倒立摆的matlab仿真实验.doc
- 速运公司物流管理模式研究教材
- 大数据与管理.pptx
- 单片机课程设计之步进电机.doc
- 大数据与数据挖掘.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0