麻雀虽小,却五脏俱全,这本书涵盖:编程风格(基本格式化、注释、语句和表达式、变量),编程实践(UI层松耦合、避免使用全局变量等等)第三部分自动化。
第一部分比较基础,接触也比较多,经常培训新员工也会讲解代码规范的内容,代码规范虽然简单,但却十分重要。这部分由于熟悉也看得比较快。
第二部分编程实践,属于很多知道,却不明白原理,看完这本书之后,仔细想想原理便对它“日久也弥新”了。比如UI松耦合为什么要抽离css,js,而且这里面也牵涉了一个概念“js模板”(将HTML从js中抽离),以前用过js模板,但没怎么发现它的好处,听了这本书的一些讲解觉得还是有道理的,道理就是方便调试,(ps这个道理看起来真站不住脚啊 ,哈哈哈)方法有三:从服务器加载、简单客户端模板(自己写个函数来实现页面标签的组装)、复杂客户端模板(使用js模板,如Handlebar等)。
第一个问题:
var name = "Nicholas";
alert(name.toUpperCase());
尽管name是一个字符串,是原始类型不是对象,但你仍然可以使用诸如toUpperCase()之类的方法,即将字符串当做对象来对待。这种做法之所以行得通,是因为在这条语句背后js引擎创建了string类型的新实例,紧跟着就被销毁了,当再次需要时就会又创建另外一个对象。
var name = new String("Nicholas");
name.author = true;
alert(name.author);//true
var name = "Nicholas";
name.author = true;
alert(name.author);//undefined
在避免使用全局变量中,抛出概念:模块,其中又包含YUI模块和AMD模块。模块是一种通用的功能片段,它并没有创建新的全局变量或命名空间,相反,所有这些代码都存放于一个表示执行一个任务和发布一个接口的单函数中。可以用一个名称来表示这个模块,同样这个模块可以依赖其他模块。还有一种类型是零全局变量,jquery这些插件就是使用的这个立即执行的函数来实现零全局变量的。
事件处理:业务逻辑和事件的处理分开
比较:typeof 用来检测原始值:string number boolean undefined 最后一个原始值null 一般不用于检测。运行type null返回"object",这是一种抵消的判断null方法。如果需要检测null,则直接使用恒等运算符(===)或者非恒等(!==),检测引用值 Object、Array、Date、Error,typeof运算符显得力不从心,因为都返回“object”,使用instanceof
检测函数 typeof myFunc === “function”
检测数组
Object.prototype.toString.call(value) === "[object Array]"
检测属性
if("count" in object)
如果是只想检查实例对象的某个属性是否存在,则使用hasOwnProperty()方法。
将配置数据从代码中分离出来
Props2Js工具读取Java属性文件,并给出三种格式的输出。
抛出自定义错误的好处是可以区分出是浏览器本身的还是自己写的验证错误(感觉try catch错误自己用得很少啊 囧)
浏览器嗅探
避免浏览器推断,而应该用特性检测
第三部分自动化
文件合并加工、精简压缩、文档化、自动化测试等等
最后决定咱们项目组使用CI持续集成
哈哈哈,终于写完,看完这本书收益良多,对于如何改进js,提供了很多可以扩展的方向!