《编写可维护的Javascript》学习总结
第一部分
一、基本规范
1.缩进:一般以四个空格为一个缩进。
2.语句结尾:最好加上分号,因为虽然“自动分号插入(ASI)”机制在没有分号的位置会插入分号,但是ASI规则复杂而且会有特殊情况发生
// 源代码
function aaa() {
return
{
title: 'aaaa',
id: '2222'
}
} // ASI解析
function aaa() {
return;
{
title: 'aaaa',
id: '2222'
}
} 此时return换行会返回undefined
3.行的长度:不应超过80个字符
4.换行:一般在运算符(比如逗号)后换行,然后增加两个层级(一个层级为四个空格的话,增加的就是八个空格)。
当给变量赋值时,第二行位置应当和赋值运算符位置保持对齐
var result = aaaa + bbbb + ccccc + dddd + eeee +
fffffffff + gggggg + hhhh
5.空行:适当空行增加代码可读性
- 在方法之间
- 在方法中的局部变量和第一条语句之间
- 在多行或单行注释前
- 逻辑片段间
6.命名方法:驼峰式
变量:应用名词进行命名 var name = "skq"
函数:应以动词为函数名前缀 function doSomething(){}
常量:使用大写字母和下划线命名 var MAX_COUNT = 10;
7. 注释
- 单行注释后要有一个空格 // 注释
- 多行注释,要与前一段代码前有一个空行
// 这是一个数组
var aaa = [1,2,3,4];
/*
* 这是一个函数
* 有一个变量为aaa
*/
function aaa() {
var aaa = [1,2,3,4];
}
二、语句和表达式
1.switch - default
default可省略
2.for - break&&continue
break: 终止本次循环
continue: 跳出本次循环
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
var arr = [1, 2, 3, 4];
var len = 2; function aaa(data) {
console.log(data);
} for (var i = 0; i < arr.length; i++) {
if (i === len) {
break;
}
aaa(arr[i]); // 1,2
} for (var i = 0; i < arr.length; i++) {
if (i === len) {
continue;
}
aaa(arr[i]); // 1,2,4
} </script>
</head>
<body> </body>
</html>
避免使用continue,尽量使用if语句
3.for-in
在使用for-in时,它不仅遍历对象的实例属性,同样还遍历从原型集成来的属性。当遍历自定义对象属性时,往往会因为意外的结果终止。所以用hasOwnProperty()在来for-in循环过滤出实例属性。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
var obj = {
name: 'aaa',
age: 11
}
for (attr in obj) {
if (obj.hasOwnProperty(attr)) {
console.log(obj[attr]);
}
} </script>
</head>
<body> </body>
</html>
三、变量、函数和运算符
1. var的使用
建议var合并成一条语句
var aaa = 10,
bbb = aaa + 10,
ccc,
ddd;
2.具有强制类型转换机制: 等号(==)
推荐使用 === 和!==,不会涉及强制类型转换
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
alert(false == 0); // true
alert(true == 1); // true
alert(true == 2); // false
</script>
</head>
<body> </body>
</html>
3. eval(), setIterval(), setTimeout(), 和 Funtion中传入字符串时,都可当做代码来执行,避免传入字符串
var myfunc = new Function("alert('Hi')");
四、编程实践
1. 将css从JavaScript中抽离
用className替代style(除了定位的情况)
五、事件处理
1.隔离应用逻辑
把应用逻辑单拎出来,这样就可复用于很多地方了
2.不要分发事件对象(event)
最佳办法是让事件处理程序使用event对象来处理事件,然后拿到所有需要的数据传给应用逻辑
六、避免空比较
1、检测原始值
检测类型:Boolean、Number、String、null、undefined
方法:typeof
注意: null不应用于检测语句,如果要对比的确实为null,用 === 或者==!来精确判断
2、检测引用值(object)
内置引用类型:Object、Array、Date、Error
方法:instanceof (不仅检测对象的构造器,还检测原型链)
* instanceof不使用函数和数组
3、检测函数
方法:typeof
* typeof 可以跨帧(frame),但是IE8及更早版本有问题(返回Object)
/**
* underscore源码
*/
if (typeof /./ != 'function' && typeof Int8Array != 'object') {
_.isFunction = function(obj) {
return typeof obj == 'function' || false;
};
}
4、检测数组
/**
* underscore给出的方案
*/
var nativeIsArray = Array.isArray;
_.isArray = nativeIsArray || function(obj) {
return toString.call(obj) === '[object Array]';
};
// 书中给出方案
function isArray(value) { if (typeof Array.isArray === “function”) { return Array.isArray(value); } else { return Object.prototype.toString.call(value) === "[object Array]" } }
四、将配置数据从代码中分离
1、配置数据类型
- 写死在代码里的值
- URL:比如API的url
- 展现给用户的字符串:比如报错提示
- 重复的值
- 任何可能变化的值
2、抽离配置文件
3、把配置数据放在一个独立的文件里
五、文件和目录结构
基本目录结构
- build 放置最终构建后的文件,理想情况下不应该提交
- src 放置所有源文件,包括用来进行文件分组的子目录
- test或tests 放置所有的测试文件
六、附录总结
1. 缩进为4个空格(?可能因为这本写的时间比较长了?现在多个比较有名的框架都是两个空格为一个缩进,不过这个我搜了一下,也看个人习惯和团队规范)
2.一行不超过80个字符
《编写可维护的Javascript》学习总结的更多相关文章
- mongoDB权威指南学习笔记
//mongoDB第1-3章节添加,修改,修改器的笔记: //备注:和MySQL查询一样,时刻想着优化查询数据的时间和性能 //db.help() //数据库帮助信息 //db.blog.help() ...
- Hadoop权威指南学习笔记二
MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...
- 《JS权威指南学习总结》
JS权威指南学习总结:http://www.cnblogs.com/ahthw/category/652668.html
- 《JS权威指南学习总结--开始简介》
本书共分成了四大部分: 1.JS语言核心 2.客户端JS 3.JS核心参考 4.客户端JS核心参考 其中 <JS权威指南学习总结--1.1语法核心> 是:第一部分JS语言核心 各章节重点 ...
- Hadoop权威指南学习笔记一
Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...
- Hadoop权威指南学习笔记三
HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my ...
- HTTP权威指南-学习笔记
目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- CSS权威指南学习笔记系列(1)CSS和文档
题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对, ...
- Node.js权威指南学习记录
学习nodeJS权威指南的学习记录 导航: 1.console模块 2.全局变量 3.Buffer对象 4.事件对象 5.网络请求 6.文件操作对象 一. COMMON.js的学习.(commonJS ...
随机推荐
- Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数
Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...
- Ubuntu 16.04安装UML工具StarUML 2
StarUML 2是一个商业软件,但是没有时间限制,就像Sublime Text 3一样.而且具有跨平台,支持Mac.Windows. 这个软件曾经08年的时候在老D的博客上有推荐过,参考:http: ...
- Builder设计模式
Builder模式,又称生成器或构建者模式,属于对象创建型模式,侧重于一步一步的构建复杂对象,只有在构建完成后才会返回生成的对象.Builder模式将一个复杂对象的构建与它的表示分离,使得同样的构建过 ...
- spring依赖注入中获取JavaBean
一.这个接口有什么用? 当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean.换句话说,就是这个类可以 ...
- Bundle格式文件的安装
安装VMware Workstation for Linux,文件是Bundle格式,安裝如下: 1 su要先取得root權限2hmod +x VMware-Workstation-Full-7.1. ...
- 贪吃蛇 c++ ncurses
近期学ncurses.用贪吃蛇训练下 思路:不构造链表.蛇头向前进方向打点,蛇尾逐点消失,形成移动. 须要记录蛇头方向,蛇尾方向.并用list仿造队列,增加拐点信息(空间比链表每一个结点开辟空间节省非 ...
- zipfile zip
Python模块学习:zipfile zip文件操作 2015/05/27 · 系列教程 · zipfile 分享到:3 原文出处: DarkBull 最近在写一个网络客户端下载程序,用于下载服 ...
- Flask 解析 Web 端 请求 数组
Web前台由 JavaScript 通过Ajax发送POST请求,当请求数据为数组时,Python Flask 做服务器时的解析如下: js: var ids = []; for (var i = 0 ...
- iOS动画案例(1) 仿qq账号信息里的一个动画
受人所托,模仿qq账号信息里的一个动画,感觉挺有意思,也没感觉有多难,就开始做了,结果才发现学的数学知识都还给体育老师了,研究了大半天才做出来. 先看一下动画效果: 用到的知识点: ( ...
- 操作系统学习笔记:CPU调度
CPU调度的目的在于提高CPU利用率,不让CPU闲着.CPU是宝贵的资源,如果有一个进程,本来在CPU中运行,忽然因为要使用IO资源,于是转而请求IO,这边CPU挂起,造成就绪队列中的其他进程等待,这 ...