image.png
编写可维护的JavaScript.pdf


命名规范

  • 变量使用名词
  • 常量使用全大写,下划线分割
  • 函数使用动词开头
  • 构造函数首字母使用大驼峰。前面要跟new运算符

image.png
image.png
null:对象占位符,undefined:变量等待被赋值。
对象和数组使用直接量赋值。


注释规范

image.png
image.png
image.png
多行注释推荐写法:第一行是/,第二行是以开始且和上一行的保持左对齐,最后一行是/。
image.png
image.png
当代码不够清晰时添加注释,而当代码很明了时不应当添加注释。
image.png
image.png
当你写的代码有可能会被别的开发者认为有错误时,则需要添加注释。
image.png
浏览器特性hack,会被误认为错误的代码,应该添加注释说明。


语句和表达式

image.png
image.png


花括号对齐方式:将左花括号放置在块语句中第一句代码未尾。
image.png
块语句间隔方式:在括左圆括号之前和右圆括号之后各添加一个空格。
image.png
switch语句规范:在没有default的时候,写上注释没有default,省掉了没有必要的语法结构。
image.png
with语句可以更改包含上下文解析变量的方式。
严格模式中,with语句是被明确禁止的。
所以在开发中禁止使用with语句。

for循环
for循环有两种:
一种是传统的for循环,用来遍历数组成员;
另一种是for-in循环,用来遍历对象的属性。

有两种方法可以更改循环的执行过程(除了使用return或throw语句)。

第一种方法是使用break语句。不管所有的循环迭代有没有执行完毕,使用break总是可以立即退出循环。
第二中更改循环执行过程的方法是使用continue。continue语句可以立即退出(本次)循环,而进入下一次循环迭代。应该避免使用continue语句,可以使用if语句代替。
image.png
image.png
for-in循环是用来遍历对象属性的,不用定义任何控制添加,循环将会有条不紊地遍历每个对象属性,并返回属性名而不是值。比如:
image.png
for-in循环有一个问题,就是它不仅遍历对象的实例属性,同样还遍历从原型继承来的属性。最好使用hasOwnProperty()方法来为for-in循环过滤出实例属性。
image.png

  1. for (const key in object) {
  2. if (object.hasOwnProperty(key)) {
  3. const element = object[key];
  4. }
  5. }

声明包含对象原型链的遍历。
image.png
也可更改对象的属性不可遍历:Enumerable


变量、函数和运算符

JavaScript编程的本质是编写一个个的函数来完成任务。

函数调用间隔:
image.png
编写理解执行函数使用圆括号括起来

  1. // 好的写法
  2. var value = (function() {
  3. // 函数体
  4. return {
  5. message:'hi'
  6. }
  7. }())

编程风格推荐使用=== 和 !==

ECMAScript 5 严格模式对于eval()有着严格的限制。

编程实践

构建软件设计的方法有两种:
一种是把软件做得很简单以至于明显找不到缺陷;
另一种是把它做得很复杂以至于找不到明显的缺陷。

使用EsLint等对代码风格进行检查。

UI层的松耦合

当一个大系统的每个组件的内容有了限制,就做到了松耦合。
本质上讲,每个组件需要保持足够瘦身来确保松耦合。
组件知道的越少,就越有利于形成整个系统。

一起工作的组件无法达到“无耦合”。
在所有系统中,组件之间总要共享一些信息来完成各自的工作。
这很好理解,我们的目标是确保对一个组件的修改不会经常性地影响其他部分。

image.png
image.png
image.png
XSS漏洞

避免使用全局变量

单项全局变量,因为开发中不可能不使用全局变量。
image.png
零全局变量
image.png

事件处理

image.png
image.png

避免“空比较”

image.png
image.png
检测某个引用值的类型的最好方法是使用instanceof运算符
image.png
检测属性:检测一个属性是否在对象中存在。
image.png
image.png
image.png
如果你只想检查实例对象的某个属性是否存在,则使用 hasOwnProperty() 方法。

将配置数据从代码中分离出来

代码无法是定义一些指令的集合让计算机来执行。我们常常将数据传入计算机,由指令对数据进行操作,并最终产生一个结果。
image.png

抛出自定义错误

编写组件的错误类型和浏览器的错误类型进行区分。
抛出错误在隐藏比较深的地方抛出,便于错误发生时准确定位。
这方面能力为0,需要多查看优秀的代码,思考什么时候抛出错误。进行处理。

不是你的对象不要动