编写可维护的JavaScript(读书笔记)

1.JSLintJSHint是两个用来检查编程风格的工具。 可以将其中一种集成到打包过程中。 (2)

2.当一行长度达到了单行最大字符数限制时,需要手动将一行拆成两行。通常我们会在运算符后换行,下一行会增加两个层级的缩进。

  例外:当给变量赋值时,第二行的位置应当和赋值运算符的位置保持对齐。  (9)

3.常量: 使用大写字母和下划线来命名,下划线用以分隔单词 (13)

4.多行字符串的一种推荐写法是:使用字符串连接符(+)将字符串分成多份  (16)

5.null==undefined结果是true,那些没有被初始化的变量都有一个初始值,即undefined,表示这个变量等待被赋值。如果你使用了一个可能(或可能不会)赋值为一个对象的变量时,则将其赋值为null。 理解null最好的方式是将它当做对象的占位符 (18)

6.在严格模式中,with语句是被明确禁止的,如果使用则报语法错误。这表明ECMAScript委员会确信with不应当继续使用。本书作者也推荐避免使用with语句。(37)

7.for-in循环不仅遍历对象的实例属性,同样还遍历从原型继承来的属性。当遍历自定义对象的属性时,往往会因为意外的结果而终止。出于这个原因,最好使用hasOwnProperty()方法来为for-in循环过滤出实例属性。 for-in循环不应用来遍历数组成员。(39)

8.本书作者倾向将所有var语句合并为一个语句,每个变量的初始化独占一行。赋值运算符应当对齐。对于那些没有初始值的变量来说,它们应当出现在var语句的尾部。(43)

9.推荐总是先声明JavaScript函数,然后使用函数。  函数声明不应当出现在语句块之内。(45)

10.匿名函数可以通过在最后加上一对圆括号来立即执行并返回一个值,然后将这个值赋值给变量。  这样写不好,因为会让人误解为将一个匿名函数赋值给了这个变量。   推荐将函数用一对圆括号包裹起来。表示这是一个立即执行的函数。添加一对圆括号并不会改变代码的逻辑。 (47)

11.不推荐将“use strict”用在全局作用域中,因为这会让文件中的所有代码都以严格模式来解析。好的写法是在单个函数内部加上这句话。   但如果你想在多个函数内使用严格模式并且不必写很多行“use strict”的话,可以使用立即执行的函数。 (48)

12.如果一个布尔值和数字比较,布尔值会首先转换为数字,然后进行比较,false值变为0、true变为1。 注意:console.log(2 == true);  //false   (49)

13.推荐不要使用==和!=,而是应当使用===和!==。用这些运算符作比较不会涉及强制类型转换。如果两个值的类型不一样则认为它们不相等。(50)

14.将javascript从CSS中抽离。即避免使用CSS表达式。(57)

15.将CSS从JavaScript中抽离意味着所有的样式信息都应当保持在CSS中。当需要通过JavaScript来修改元素样式的时候,最佳方法是操作CSS的className。 (59)

IE8及更早的版本不支持addEventListener()函数,你可能需要一个标准的函数将这些差异性做封装。(61)

任何来自函数外部的数据都应当以参数形式传进来。这样做可以将函数和其外部环境隔离开来,并且你的修改不会对程序其他部分造成影响。(72)

当你给一个未被var语句声明过的变量赋值时,JavaScript就会自动创建一个全局变量。(72)

如果你给一个未声明的变量赋值,JSLint和JSHint这两个工具会报警告。(73)

对于新的代码,最好总是使用严格模式来避免意外的全局变量,同时其他一些常见的编程错误也能在严格模式下被捕捉到。(74)

MyApplication.handleClick()将x坐标和y坐标传入了MyApplication.showPopup(),代替了之前传入的事件对象。可以很清晰地看到MyApplication.showPopup()所期望传入的参数,并且在测试或代码的任意位置都可以很轻易地直接调用这段逻辑。(86)

事件处理程序应当在进入应用逻辑之前针对event对象执行任何必要的操作,包括阻止默认事件或阻止事件冒泡,都应当直接包含在事件处理程序中。(87)

检测一个值是否是字符串、数字、布尔值或undefined,最佳选择是使用typeof运算符。如 if (typeof name === "string")。  (89)

在编程时要杜绝使用typeof来检测null的类型,因为它会返回“object”,这被认为是标准规范的严重bug。(91)

检测某个引用值的类型的最好方法是使用instanceof运算符。如var now=new Date(); console.log(now instanceof Date);(91)

检测函数的最好方法是使用typeof,因为它可以跨帧(iframe)使用。(93)

如果想在IE8及更早浏览器中检测DOM方法是否存在,开发者往往通过in运算符来检测DOM的方法,这是最安全的做法。在其他所有的情形中,typeof运算符是检测JavaScript函数的最佳选择。(93)

鸭式辨型:像鸭子一样走路、游泳并且嘎嘎叫的鸟就是鸭子。本质上是关注“对象能做什么”,而不要关注“对象是什么”。(94)

判断属性最好的方法是使用in运算符,in运算符仅仅会简单地判断属性是否存在,而不会去读属性的值。  不好的写法是使用带中括号的下标表示法。(96)

如果你只想检查实例对象的某个属性是否存在,则使用hasOwnProperty()方法。(96)

一些配置数据的例子:URL、 需要展现给用户的字符串、 重复的值、 设置(比如每页的配置项)、 任何可能发生变更的值。(99)

使用类似Props2Js之类的工具可以让我们把配置数据放入格式很简单的文件里,并很容易地转换为JavaScript格式的文件。(102)

唯一不出差错的显示自定义的错误消息的方式就是用一个Error对象。(105)

这些东西不应该修改:原生对象(Object、Array等等);DOM对象(例如document)、浏览器对象模型(BOM)对象(例如window);类库的对象。(113)

不好的写法:在DOM对象上增加了方法;在原生对象上增加了方法;在库对象上增加了方法。(115)

持续更新中,转载请注明出处~~

原文地址:https://www.cnblogs.com/KingdomLiu/p/5872460.html