读《编写可维护的JavaScript》第四章总结
第四章 变量 函数和运算符
4.1 ① 变量声明
变量声明是通过var语句来完成的,并且所有的var语句都提前到包含这段逻辑的函数的顶部执行。
function doSomething() {
var result = + value;
var value = ;
return result;
}
// 编译器理解为
function doSomething() {
var result; // 这里为undefined
var value; // 这里为undefined
result = +value;
value = ;
return result;
}
变量声明提前意味着:在函数内部任意地方定义变量和在函数顶部定义变量是完全一样的。因此,一种流行的风格是将所有变量声明放在函数的顶部而不是散落在各个角落,简言之,依照这种风格写出的代码逻辑和JavaScript引擎解析这段代码的习惯是一样的。
作者还进一步推荐单var语句,每个变量的初始化独占一行,赋值运算符应当对齐(个人觉得没必要- -,并且后面的事例代码的风格也没有遵守这条),对于那些没有初始值的变量来说,他们应当出现在var语句的尾部。
// 好的声明
function doSomethingWithItems(items) {
var value = ,
result = value + ,
i,
len;
for (i=, len=items.length; i < len; i++) {
doSomething(items[i]);
} }
4.2 ② 函数声明
总是先声明函数后使用,函数声明不应当出现在语句块之内。
// 不好的写法
doSomething(); function doSomething() {
alert("Hello world");
} // JS引擎理解为
function doSomething (){
alert("Hello world");
} doSomething();
// 不好的写法,明确禁止
if (condition) {
function doSomething() {
alert("Hi!");
}
} else {
function doSomething() {
alert("Yo!");
}
}
4.3 ③ 函数调用间隔
对于函数调用写法推荐的风格是,在函数名和左括号之间没有空格,这样做是为了将它和块语句(block statement)区分开来。
// 好的写法
doSomething(item); // 不好的写法: 看起来像一个块语句
doSomething (item); // 用来作对比的块语句
while (item) {
// 代码逻辑
}
4.4 ④ 立即调用的函数
立即调用的函数用一对圆括号包起来。
// 好的写法
var value = (function () { //函数体 return {
message: "Hi"
}
}());
4.5 ⑤ 严格模式
不推荐将"use strict"用在全局作用域中,因为这样会让文件中的所有代码都以严格模式解析,其他文件(非严格模式下的)代码很可能报错。
// 不好的写法
"use strict"
function doSomething () {
//代码
} // 好的写法
function doSomething () {
"use strict"
// 代码
}
4.6 ⑥ 相等
由于JavaScript具有强制类型转换机制(type coercion),JavaScript中的判断相等操作是很微妙的。对于某些运算来说,为了得到成功的结果,强制类型转换会驱使某种类型的变量自动转换成其他不同类型,这种情形往往会造成意想不到的结果。So,注意底下这句:
所有情形推荐使用===和!==
4.6.1 ⑦ eval
就一句话: 实在无它法时才用eval();
4.6.2 ⑧ 原始包装类型
JavaScript里有三种原始包装类型:String,Booleanl,Number。它的主要作用是:让原始值具有对象般的行为。
还是一句话:禁止使用原始包装类型。
// 不好的做法
var name = new String("Nicholas");
var author = new Boolean(true);
var count = new Number();
理由:开发者的思路常常会在对象和原始值之间跳来跳去,这样会增加出bug的概率,从而使开发者陷入困惑。你也没有理由自己手动创建这些对象。
读《编写可维护的JavaScript》第四章总结的更多相关文章
- 读《编写可维护的JavaScript》第一章总结
第一章 基本的格式化 1.4 ① 换行 当一行长度到达了单行最大的字符限制时,就需要手动将一行拆成俩行.通常我们会在运算符后换行,下一行会增加俩个层级的缩进. // 好的做法: 在运算符后换行,第二行 ...
- [已读]编写可维护的javascript
13年4月份出版,作者是大名鼎鼎的Zakas,他的另两本书<javascript高级程序设计>与<高性能javascript>你一定听过或者读过. 这本书重点讲了编码风格和编码 ...
- 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)
本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ...
- 拯救一切强迫症 - 读《编写可维护的 JavaScript》(一)
拯救一切强迫症 - 读<编写可维护的 JavaScript>(一) 本文写于 2020 年 4 月 24 日 我在小学的时候就有接触过编程,所以读大一的时候 C 语言还算是轻车熟路.自然会 ...
- 《编写可维护的javascript》读书笔记(中)——编程实践
上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...
- 《编写可维护的javascript》读书笔记(上)
最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...
- 编写可维护的JavaScript 收纳架
如果你看过Nicolas C.Zakas写过的任何作品,你必须承认他是个不折不扣的天才.也只有天才级的才能写出<JavaScript高级程序设计>让所有的前端攻城师人手一本.Nicolas ...
- 推荐一本好书:编写可维护的JavaScript(可下载)
目录 推荐一本好书:编写可维护的JavaScript(可下载) 书摘: 下载: 有些建议: 推荐一本好书:编写可维护的JavaScript(可下载) 书摘: 很多设计模式就是为了解决紧耦合的问题.如果 ...
- 《编写可维护的JavaScript》之编程实践
最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...
- 编写可维护的Javascript读书笔记
写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...
随机推荐
- C# 迪杰斯特拉算法 Dijkstra
什么也不想说,现在直接上封装的方法: using System; using System.Collections.Concurrent; using System.Collections.Gener ...
- MWeb for iOS 测试版介绍
目前已开始第二次测试:MWeb for iOS 版本发布说明,更新至第二次测试版本  上图为 MWeb for iOS 的图标,再次感谢 @Producter http://weibo.com/u/ ...
- 总结ThinkPHP使用技巧经验分享(一)
约定:1.所有类库文件必须使用.class.php作为文件后缀,并且类名和文件名保持一致2.控制器的类名以Action为后 缀3.模型的类名以Model为后缀,类名第一个字母须大写4.数据库表名全部采 ...
- 漫谈java重载与重写
重载(Overloading):为了让方法名相同而形参不同的构造方法同时存在,让类以统一的方式处理不同类型数据的一种手段 重写(Overriding):导出类对继承自基类的方法做出一定的修改,又称方法 ...
- android五种存储方式
http://www.cnblogs.com/smalltigerlee/archive/2011/11/10/2244143.html
- WebIM 聊天 Demo
最近 2 个月用业余时间写了一个 IM ,动手之前想了很多,包括前期设计.语言.数据库等,经过了一番思想斗争,最终前台用 Vue.js 展示,Server 使用 node ,数据库使用 MongoDB ...
- git push :推送本地更改到远程仓库的三种模式
摘要:由于在git push过程中,no-fast-forward 的push会被拒绝,如何解决git push失败的问题?这里面有三种方法,分别会形成merge形式的提交历史,线性形式的提交历史,覆 ...
- C# 自动Ping 测试服务器运行状况
通过小程序自动Ping配置文件中的IP地址,间隔时间.IP地址.手机号码通过配置文件获得. 废话不多说,上代码. using Newtonsoft.Json; using Newtonsoft.Jso ...
- activiti-5.15备份记录
activiti-5.15用户手册翻译完成 源码下载地址:http://activiti.org/download.html在线浏览地址: http://www.mossle.com/docs/act ...
- [T-SQL]INSERT INTO SELECT 与 SELECT INTO FROM
1.INSERT INTO SELECT 语法:INSERT INTO Table2(field1,field2,...) select value1,value2,... from Table1 要 ...