读书笔记:编写可维护的javascript

  1. 使用for-in循环的时候,要使用hasOwnProperty方法进行过滤,除非你想查找原型链上的继承属性
  2. 不应当使用for-in循环进行数组遍历,而只应该对object的属性进行遍历
  3. 每行表达式的结尾要使用分号(;),为了使压缩包能正常工作,还应该为每个js文件的开头加上分号,形如这样的匿名函数定义;(function(){...}());
  4. 变量初始化应该赋值null, 因为typeof这种操作符,对于未初始化的变量返回的是object,而未声明的变量返回undefine
  5. null==undefined的结果是true,而null===undefined的结果是false,因此我们应该使用===,!==
  6. 不要直接在object构造对象上附加属性,而要通过json格式的表示法来初始化一个对象
  7. 函数体中所有变量的声明会被解析器提前到第一句执行语句前,因为js引擎执行函数时会首先扫描作用域内的所有的变量,无论它放在函数体何处
  8. 虽然所有的声明会被提前,而且函数声明优先级高于同名的变量声明,但只要变量在声明的同时进行了初始化,那函数声明就无法再覆盖了
  9. 函数声明不应放在代码块中间或后面,尤其是判断条件的里面,不同的浏览器对此的解释是不同的,但把匿名函数赋值给表达式的声明方式不适用此规则
  10. 不要使用eval,也不要在Function,setTimeout,setInterval等函数中传入字符串
  11. 不要在css中嵌入javascript表达式,这会导致浏览器的重复计算,从而使得系统的整体性能下降,而且这种把js渗入到css中的做法不值得提倡
  12. 不要在javascript中操作对象的css样式。相比上一条,这一条更容易犯错,因为我们经常会在Dom元素中修改style属性
  13. 将css与js分离,同时又能保持相互之间的联系的秘诀就是js只负责操作css的className,而把className的样式定义放在css中
  14. 不要在html中直接嵌入javascript代码片段,而要把javascript代码放入单独的js文件中,使用<script>引用外部文件的方式
  15. 不要在javascript中直接嵌入html代码,使用javascript模板引擎,然后通过变量进行渲染会更好一点
  16. handlebars是一款优秀的javascript模板引擎,它能帮你实现模板+变量=动态html,在ember等前端框架中也有使用
  17. 处理javascript全局变量冲突问题的方法有两种
    1. 一是使用单全局变量

      1. 即一个应用系统的所有内部变量置于某一个全局变量之下,而这个全局变量要位于javascript引擎的上下文环境中
      2. javascript的内置对象,比如Array,Date等,你可以把它们看成是一个单全局变量,因为这些变量几乎在每个应用中都可能使用
      3. 单全局变量的应用要涉及到命名空间的划分和模块的加载
      4. 对于模块加载,可以使用使用AMD(异步模块定义),它提供了全局函数define用于加载依赖模块
      5. 想要使用AMD,需要有与之兼容的模块加载器,比如RequireJS,http://www.requirejs.org/
      6. requireJS提供了一个require全局函数,用来加载模块和执行加载成功后的方法回调
    2. 二是使用零全局变量
      1. 零全局变量的使用,主要是通过匿名函数的即时调用来实现
      2. 虽然零全局变量不会造成全局污染,但通常使用的场景有限
      3. 一般用于页面初始加载,或者需要某段一次性执行的代码,而且它与其它代码无交互,也不对外输出接口
  18. 处理事件时,要将事件处理逻辑和应用逻辑分离,event对象永远只被事件处理逻辑所持有,应用逻辑不要直接访问event对象
  19. 采用typeof运算符检测基本类型,用instanceof检测引用类型,用===检测null
  20. 检测函数:typeof myFunc === "function"
  21. 检测数组:Array.isArray(myArray)
  22. 检测属性:myAttr in myObject, Object.hasOwnProperty
  23. 由于js解析器不会保护任何代码包括执行环境,所以应用开发人员不应该修改除自己代码以外的其它任何代码,这包括js的原生类型,DOM,BOM以及第三方类库,如jQuery等
  24. Ant也可以用作javascript的构建工具

时间: 2024-08-01 11:06:22

读书笔记:编写可维护的javascript的相关文章

《编写可维护的javascript》读书笔记(中)——编程实践

上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. 二.编程实践 1.UI松耦合 第一.将css从javascript中抽离(要改变dom样式数据,应该去操作dom的class名而非dom的style属性,后续要修改此样式只需到对应的css文件中修改而不用修改js文件): 第二.将javascript从HTML中抽离,比如下面的写法是不好的 <!-- 不

《编写可维护的javascript》读书笔记(上)

最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. 1.缩进:一种是利用制表符缩进,一种是使用空格符缩进,各有利弊,任选一种,保持一致即可.个人比较喜欢制表符缩进. 2.语句结尾需要加上分号,避免没必要的BUG. 3.命名:首先要语义化,使用驼峰式命名法,小驼峰即首字母小写,之后每个单词首字母大写:大驼峰即首字母大写,之后同小驼峰:变量名前缀应该是名词(my

编写可维护的JavaScript之简易模版

/* * 正则替换%s * @para arg1(text) 需要替换的模版 * @para arg2 替换第一处%s * @para arg3 替换第二处%s * 返回替换后的字符串 */ var sprintf = function (text) { var i = 1, args = arguments, len = args.length; return text.replace(/%s/g, function () { return (i < len) ? args[i++] : &quo

编写可维护的JavaScript之事件处理

规则1:隔离应用逻辑 这会让你的代码容易调试 规则2:不要分发事件对象 event对象包含了太多信息 // a good example var handlePopup = { // 事件句柄,处理所有和event对象有关的东西 handleClick: function (e) { // 假设事件支持DOM Level2 e.preventDefault(); e.stopPropagation(); // 传入应用逻辑 this.showPopup(e.clientX, e.clientY)

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

第一章主要讲的是编程风格部分的基本格式化. 一个严格按照一定规范来编写的项目,无论从可读性,可维护性,或者运行性能上来说,都是比无规范项目更胜一筹的. 基本的格式化包含以下几种: 1.缩进层级 良好的缩进能让多位开发人员更快的读懂代码,提高工作效率. 至于如何缩进,其实并没有一个统一的共识,但是在空格缩进和制表符缩进中,我主张制表符缩进,原因很简单:按钮数少. 2.语句结尾 说到语句结尾,其实在javascript中最常见的就是加不加分号,什么时候加分号的问题. 依赖于js分析器的自动分号插入(

《编写可维护的 Javascript》读书笔记(附录 A 部分):Javascript 编码风格指南(1)原始值

记录一下比较有用的编码规范(该指南是基于 Java 语言编码规范和 Javascript 编程规范,同时结合作者 Nicholos Zakas 的个人经验和喜好). 一些关于格式(包括缩进.行的长度.运算符间距.括号间距.对象直接量.注释.单行注释.多行注释等类似的规范)的规范这里不做记录. A.3 原始值 // 好的写法 var name = "Nicholos"; // 不好的写法:单引号 var name = 'Nicholos'; // 不好的写法:字符串结束之前换行 var

读《编写可维护的javascript》笔记

第一章 基本的格式化 缩进层级:推荐 tab:4; 换行:在运算符后面换行,第二行追加两个缩进: // Good: Break after operator, following line indented two levels callAFunction(document, element, window, "some string value", true, 123, navigator); // Bad: Following line indented only one leve

编写可维护的Javascript纪要

第一部分: 编程风格 在大型项目开发中,因为项目可读性规范性的需要(就像<编写可维护性的Javascript>一书作者Nicholas Zakas大神所说,他们团队所有成员写出的代码就像是经同一个人之手写出的一样),风格约定要大于个人喜好这一点毋庸置疑,不过什么样才是好的编程风格约定?下面推荐一些实践中沉淀下来的代码规范和最佳实践: 缩进 缩进问题和编辑器问题一样是一个因为个人喜好和其他不管值得不值得争执的理由而存在争议的问题,目前存在两个流派,空格流和tab流.个人比较习惯于tab(4个空格

读《编写可维护的JavaScript》第六章总结

第六章 避免使用全局变量 JavaScript执行环境在很多方面都有其独特之处,全局变量就是其中之一.“全局变量”是一个神秘的对象,它表示了脚本的最外层上下文. 在浏览器中,windows对象往往重载并等同于全局对象,因此任何在全局作用域声明的变量和函数都是windows对象的属性. 6.1 全局变量带来的问题 这个就不用照着书详谈了,当我们进入团队合作编写代码时,若大家自定义的变量都是直接挂载在windows对象上(也就是全局变量),很容易发生命名冲突.像这样: function sayCol