Javascript安全编程规范
命名
1. 原则——编码格式UTF-8,根据功能为变量与⽅法命名(尽量不缩写)
2. 类——构造函数/类使⽤⼤驼峰命名法
3. ⽅法——动词、动宾结构,使⽤⼩驼峰命名法
ex:get + ⾮布尔属性名() is + 布尔属性名() set + 属性名() has + 名词/形容词() 动词() 动词 + 宾语() 建议——类中的私有属
性和⽅法名,建议以下划线开头或结尾
实例:
class Foo() {
this._bar = computerBar(); // 私有属性
this.baz = computerBaz(); // ⾮私有属性,可通过实例访问
}
4. 变量——⼩驼峰风格、避免使⽤否定的布尔变量名、缩写词全⼤/⼩写、不要⽤保留字作键名或变量名、jQuery类变量以 $ 开头
5. 常量——全⼤写单词,以下划线连接
6. 注释——复杂的判定条件封装成名字清晰的⽅法,把判定结果作为返回值(好的注释描述代码为什么这么写,⽽不是描述代码功能)
单⾏:// 块: /* / ⽂档: /* */(包含⽤法,参数,返回值说明)
代码排版格式
1. 缩进——只允许空格,使⽤Tab的话需要更改IDE配置⾃动将Tab转化为空格
2. 换⾏——以操作符/运算符开头
3. ⽅法的参数尽量在⼀⾏——长参数名单独⼀⾏
4. 对象字⾯量属性最多4个同⾏——⼤于4个的话每个参数独占⼀⾏
5. 链式调⽤⽅法时⼀⾏最多4次——否则需要换⾏,把点放在前⾯
6. 每⾏声明⼀个变量,禁⽌连续赋值
7. 使⽤基本类型的字⾯量⽽不是其封装类型
8. 禁⽌变量声明覆盖外层作⽤域的变量
⽅法
1. ⽅法设计原则——单⼀职责原则、单⼀抽象层次
2. 参数<=5个——参数过多可抽象为对象、不要把⽅法⼊参当作⼯作变量/临时变量、默认参数放最后、实现对外API时应对外部传⼊参数
的合法性进⾏判断jquery 字符串转数组
3. 声明与实现——使⽤声明的⽅式定义⽅法⽽不是表达式、⽤到匿名函数时尽量使⽤箭头函数
function Foo(){}即为声明式,有函数提升效果 var Foo = function (){}即为表达式,必须先定义后使⽤
字符串
1. 使⽤单引号(创建⼀个包含HTML代码的字符串就会知道原因:标签属性需要⽤双引号括起来,会跟字符串的双引号产⽣配对错乱问
题)
2. 使⽤模板字符串实现字符串拼接(``)
数组
1. 将数组当成包装数据结构使⽤,使⽤栈⽅法和队列⽅法(push、pop、shift、unshift等)
2. 不要在数组上定义或使⽤⾮数字属性(length除外)
arr['str'] = 'string',数组尽量以索引为键
3. 遍历时优先使⽤Arrary⽅法,如 forEach、map、filter、
4. 不要在forEach⾥进⾏元素的remove/add操作,会导致遍历紊乱
5. 使⽤扩展运算符 ... 赋值数组,避免浅拷贝问题
对象
1. 对象字⾯量名称使⽤标识符
var object = { id:1, name:'name1' } 不要使⽤下⾯这种字符串做键 var obj = { 'str':'string' }
2. 尽量在⼀个地⽅定义对象的所有属性,即初始化定义对象时就把所有键都初始化,尽量不要后续添加属性
3. 对象字⾯量中使⽤⽅法简写、属性简写
4. 使⽤点来访问对象属性,只有属性是动态的时候使⽤[ ],例如使⽤for-in遍历对象时通过key访问value
5. getter和setter应该成对出现在对象中
6. 禁⽌对象实例上直接使⽤Object.prototype的内置属性
7. 需要约束for-in
8. 不要修改内置对象的原型或向原型添加⽅法
9. 使⽤扩展运算符 ... 进⾏对象赋值,防⽌浅拷贝问题
运算与表达式
1. if判定条件中,变量在先,字⾯量在后
2. 使⽤ === 和 !===
3. 使⽤简写的条件表达式,例如:当isValid时bool型时,写if(isValid) ⽽不是 if(isValid===true)
4. 不要在复杂条件表达式前加否定符
5. 不要使⽤否定表达式
6. 禁⽌使⽤嵌套的三元表达式
7. 在混合使⽤不同的操作符时采⽤括号明确运算的优先级
8. 数值有溢出风险时使⽤位运算替代四则运算
控制语句
1. 每个switch语句都包含⼀个default语句,即使它不包含任何代码
2. 每个有内容的case中都放置⼀条break语句,有return的除外
3. 对于if-else if类型的条件判断最后必须包括⼀个else分⽀
4. 不要⽤逻辑运算符代替控制语句
正则表达式
1. 禁⽌正则表达式字⾯量中出现多个空格
2. 建议正则表达式中使⽤命名捕获组
其他特性
1. 注意this的不同分⽀
2. this的使⽤场合
1. 函数是构造函数
2. 函数是⼀个⽅法
3. 允许在以下函数中调⽤中出现this关键字
1. 调⽤了该函数的call/apply/bind⽅法
2. 如果给出thisArg,该函数是数组⽅法的⼀个回调
3. 函数在JSDoc注释标记中有@this标签
3. 不要在顶级作⽤域下使⽤变量和函数声明
4. 为window上的属性/⽅法加上命名空间
模块
1. 代码中总使⽤ES6标准的模块(import/export)⽅式,⽽不是使⽤⾮标准的模块模块化加载器(Node.js代码除外)
2. 不要import通配符 *
3. 不要多次import同⼀模块
4. import的顺序依次为内置模块,外部模块,内部模块
5. import不要包括Javascript⽂件拓展名
6. import不使⽤绝对路径
7. import的三⽅件需加⼊到package.json
8. 当模块只有⼀个export时,最好使⽤默认导出,⽽不是命名导出
9. 如果⽂件只export⼀个函数,那么⽂件名、类名、以及默认导出的名称应⼀致
10. 不要从import中直接export
11. 需要导出的变量必须是const类型或不可变的类型
数值与计算
1. 禁⽌省略⼩数点前后的0
2. 要求调⽤isNaN()检查NaN
异常的使⽤
1. 抛出的异常应该是Error错误或Error的⼦类,永远不要抛出字符串或其他对象
2. 要求使⽤Error对象作为Promise拒绝的原因
3. 禁⽌在finally语句中出现控制流语句
异步
禁⽤不必要的return await
避免
1. 禁⽌使⽤eval()
2. 禁⽌使⽤隐式的eval()
3. 禁⽌使⽤with(){}
4. 禁⽌使⽤较短的符号实现类型转换(即通过运算进⾏强制类型转换)
5. 禁⽌多余的return语句
6. 不要在HTML中写过多的JS和CSS代码
7. 不要使⽤⾮标准的功能
性能编程规范
1. 缓存jQuery查询结果
2. 避免所有元素选择器
3. 有限使⽤ID选择器,尽量给选择器指定上下⽂context
4. 循环中减少DOM操作
5. 利⽤事件代理机制(冒泡)
其他
1. 尽量不使⽤同步请求
2. 减少界⾯DOM的更新(静态内容尽量不要重排重绘)
3. 减少HML标签数
内存编程规范
1. DOM
1. 在满⾜业务特性需求的情况下,减少DOM对象的动态创建和删除
2. 禁⽌在循环/事件回调中使⽤⽂本+变量的⽅式使⽤jQuery创建DOM
3. 尽量不适⽤iframe
2. 事件监听
1. 正确使⽤DOM Event level 2/3标准进⾏时间的绑定和注销
2. 页⾯卸载,动态删除的DOM对象时要先注销绑定的事件监听
3. 不要在HTML标签上嵌⼊JS事件回调代码,优先使⽤jQuery
4. 销毁不再使⽤的定时器和延时器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论