• Javascript安全编程规范


    命名

    1.原则——编码格式UTF-8,根据功能为变量与方法命名(尽量不缩写)

    2.类——构造函数/类 使用驼峰命名法,且首字母大写

    3.方法——动词、动宾结构,使用驼峰命名法,首字母小写

    例如:get + 非布尔属性名()      is + 布尔属性名()      set + 属性名()      has + 名词/形容词()        动词()        动词 + 宾语()

    建议——类中的私有属性和方法名,建议以下划线开头或结尾

    实例:class Foo() {

      this._bar = computerBar();  // 私有属性

      this.baz = computerBaz();  // 非私有属性,可通过实例访问

    }

    4.变量——驼峰风格、避免使用否定的布尔变量名、缩写词全大/小写、不要用保留字作键名或变量名、jQuery类变量以 $ 开头

    5.常量——全大写单词,以下划线连接

    注释

    复杂的判定条件封装成名字清晰的方法,把判定结果作为返回值

    好的注释描述代码为什么这么写,而不是描述代码功能

    单行://     块: /* */     文档: /** */(包含用法,参数,返回值说明)

    排版格式

    1.缩进——只允许空格,使用Tab的话需要更改IDE配置自动将Tab转化为空格

    2.换行——以操作符/运算符开头

    3.方法的参数尽量在一行——长参数名单独一行

    4.对象字面量属性最多4个同行——大于4个的话每个参数独占一行

    5.链式调用方法时一行最多4次——否则需要换行,把点放在前面

    6.每行声明一个变量,禁止连续赋值

    7.使用基本类型的字面量而不是其封装类型

    8.禁止变量声明覆盖外层作用域的变量

    方法

    1.方法设计原则——单一职责原则、单一抽象层次

    2.参数<=5个——参数过多可抽象为对象、不要把方法入参当作工作变量/临时变量、默认参数放最后、实现对外API时应对外部传入参数的合法性进行判断

    3.声明与实现——使用声明的方式定义方法而不是表达式、用到匿名函数时尽量使用箭头函数

    附:  function Foo(){}即为声明,有函数提升效果         var Foo = function (){}即为表达式,必须先定义后使用

    字符串

    1.使用单引号(创建一个半酣HTML代码的字符串就会知道原因:标签属性需要用双引号括起来,会跟字符串的双引号产生配对错乱问题)

    2.使用模板字符串实现字符串拼接(``)

    数组

    1.向数组中添加元素时使用push替代直接赋值

    2.不要在数组上定义或使用非数字属性(length除外)

    例如: arr['str'] = 'string',数组尽量以索引为键

    3.遍历时有限使用Arrary方法,如 forEach、map、filter、every...

    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.使用简写的条件表达式,例如:当siValid时bool型时,写if(isValid) 而不是 if(isValid===true)

    4.不要在复杂条件表达式前加否定符

    5.不要使用否定表达式

    6.禁止使用嵌套的三元表达式

    7.在混合使用不同的操作符时采用括号明确运算的优先级

    控制语句

    1.每个switch语句豆瓣含一个default语句,即使它不包含任何代码

    2.每个有内容的case中都放置一条break语句

    3.对于if-else if类型的条件判断最后必须包括一个else分支

    4.不要用逻辑运算符代替控制语句

    正则表达式

    1.禁止正则表达式字面量中出现多个空格

    2.建议正则表达式中使用命名捕获组

    其他特性

    1.注意this的不同分支

    2.this的使用场合

      2.1函数时构造函数

      2.2函数时一个方法

      2.3允许在以下函数中调用中出现this关键字

        2.3.1调用了该函数的call/apply/bind方法

        2.3.2如果给出thisArg,该函数是数组方法的一个回调

        2.3.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.1在满足业务特性需求的情况下,减少DOM对象的对台创建和删除

      1.2禁止在循环/事件回调中使用文本+变量的方式使用jQuery创建DOM

      1.3尽量不适用iframe

    2.事件监听

      2.1正确使用DOM Event level 2/3标准进行时间的绑定和注销

      2.2页面卸载,动态删除的DOM对象时要先注销绑定的事件监听

      2.3不要在HTML标签上嵌入JS事件回调代码,优先使用jQuery

      2.4销毁不再使用的定时器和延时器

  • 相关阅读:
    SQLServer 2008(R2)如何开启数据库的远程连接
    SQLServer 中的身份验证及登录问题
    Oracle 远程链接oracle数据库服务器的配置
    nmon 及nmon analyser工具使用简介
    排错-tcpreplay回放错误:send() [218] Message too long (errno = 90)
    Linux  释放Linux 系统预留的硬盘空间
    python 全栈开发,Day126(创业故事,软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON)
    python 全栈开发,Day125(HTML5+ 初识,HBuilder,夜神模拟器,Webview)
    python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)
    python 全栈开发,Day123(图灵机器人,web录音实现自动化交互问答)
  • 原文地址:https://www.cnblogs.com/edward-life/p/13258006.html
Copyright © 2020-2023  润新知