可维护的javascript
理论上我只能把序看完。。。。。。。
第一章:基本的格式化
1.1:JSLint,JSHint查找代码中潜在的错误。
1.2:缩进:空格(2,4,8没有兼容性)和tab(不同的编辑器展现不一样),在编辑器中配置tab键时插入4个空格。
1.3:分号的使用:结尾都使用,有懒于分析器的自动分号插入;
function getData(){
return
{
title:"hehehe",
author:"hahaha"
}
}//分析器会理解为return;{}所以{要跟return连在一起
1.4:一行的代码长度不要超过80个字符;
1.5:命名,小驼峰式(小写字母开头),变量(名词作前缀,count,myName),函数(动词做前缀getName,can,has,is,get,set开头),i,j,k通常在循环中使用,常量(大写字母和下划线 MAX_COUNT),构造函数(以大驼峰式开头用大写(AthorName),前面要有new);
1.6:字符串 var str="my name is \"yuyu\" ";var str='my name is "yuyu" ';双引号需要用转义字符\,推荐用单引号(java不能用双引号),字符串连接用+;
第二章:注释
2.1:单行注释//,独占一行(前面有一行空行,//后有一个空格),代码尾部注释(和代码尾部有一个缩进,//后有一个空格),注释多行代码(多行文本用/**/);
if(flag){
// 这是注释
console.log("yuyu"); // 这是注释
}
2.2:多行注释/**/,java风格,每行以*开头,*后有一个空格,所有的*号左对齐,注释多行文本;
if(flag){
/*
* 这是注释
* 这是注释
*/
console.log("yuyu");
}
2.3:文档注释,/** **/,@表示一个或多个属性
/** @ **/
第三章:语句和表达式
3.1:if,for,while,do...while...,try...catch...finally括号不能省,{}要换行,(之前)之后都有一个空格;
if (true) {
console.log("yuyu");
}
3.2:switch,JSLint要求如下,switch和case缩进一致,中间没有空行;
switch (condition) {
case "first":
// 代码
break;
case "second":
// 代码
break;
default:
// 代码
}
3.3:with禁止使用(干嘛的这是。。。。。)
3.4:for循环,break(跳出所有循环),continue(跳出本次循环,继续执行下一次的循环);
3.5:for-in循环,只能循环对象,不能循环数组,最好用hasOwnProperty;
var prop;
for (prop in object) {
// 实例属性什么什么的
if(object.hasOwnProperty(prop)){
console.log("name:" + prop);
console.log("value:" + object[prop]);
}
}
第四章:变量函数和运算符
4.1:在函数内任意地方定义变量和在函数顶部定义变量是一样的。一般要求将所有变量定义在顶部;
4.2:在函数内部申明的所有函数也会提至顶部;
4.3:函数名和(之间没有空格,和3.1区分开;
4.4:立即调用函数
// 将一个匿名函数赋值给book
var book=function(){
return "haha";
}
// 将匿名函数的执行结果返给book2
var book2=function(){
return "haha";
} ();
// 和book2一个意思,加()只是为了区分,()没有实际意义
var book3=(function(){
return "haha";
});
4.4:严格模式 --这货干嘛的。。。。。
function haha(){
"use strict";
}
4.5:相等 ==(!=)和===(!==)
// ==和!=会进行强制类型转换,且JSLint会发出警告 console.log(5 == "5"); // true,数字和字符串比较,字符串会转换为数字,相当于Number函数 console.log(25 == "0x19"); // true console.log(1 == true); // true,bool值会转换为数字,true(1),false(0) console.log(2 == true); // false console.log(null == undefined); // true // ===和!==不会进行强制转换,推荐使用,上面返回true的都返回false console.log(null === undefined); //false
4.6:eval() 用于执行js(不推荐使用),解析JSON(推荐使用);
第五章:UI层的松耦合
5.1:最好不要使用expression
5.2:将js从css抽离,即不要使用x.style.color="red";而使用x.className+=" red";定位x.style.left="9px"可以使用;
5.3:将js重html中抽离
// 不好的写法
<a href="#" onclick="doSomething()" id="a1">Click me</a>
// 推荐使用
<a href="#" id="a1">Click me</a>
function addListener(target,type,handler){
if (target.addEventListener) {
target.addEventListener(type,handler,false);
} else if (target.attachEvent) {
target.attachEvent("on" + type + handler);
} else {
target["on" + type]=handler;
}
}
function doSomething(){
// 代码
}
var a1=document.getElementById('a1');
addListener(a1, "click", doSomething);
5.4: 将html从js中抽离,像这种div.innerHTML="<li>1</li>";
5.4.1:从服务器加载
function loadDialog(name, oncomplete){
// 相当于dlg-holder.innerHTML=js/dialog返回的值,
$('#dlg-holder').load("js/dialog" + name, oncomplete);
}
5.4.2:简单的客户端模板
<script type="text/x-my-template" id="list-item">
<li>1</li>
<li>2</li>
</script>
var scriptText=document.getElementById("list-item").text;
第六章:避免使用全局变量
6.1:全局变量就是没有用var申明,和window.$=jQuery的window申明的;
6.2:YUI定义了唯一一个YUI全局对象;jQuery定义了两个jQuery和$;Dojo定义了一个dojo全局对象,Closure定义了一个goog全局对象;
第七章:事件处理
第八章:避免"空比较"
8.1:检测原始值,原始类型包括字符串,数字,布尔值,null,undefined;用typeof; typeof X===("string" | "number" | "boolean" | "undefined" );
8.2:检测引用值(即对象object,除了原始值);Object,Array,Date,Error,RegExp,自定义的类型,若用typeof判断全部返回"object",应该用instanceof;if(x instanceof Date) {};若用instance检测上面5种,都回返回"object";
8.3:检测函数;js中的函数是引用类型,console.log(typeof myFun==="function");但是有一种情况,IE8和以下版本中,(typeof document.getElementById 返回的是"object"),为了兼容,检测DOM方法统一使用in
// 检测Dom方法
if ("querySelectorAll" in document) {
images=document.querySelectorAll("img");
}
8.4:检测数组
// IE9+,ff4+,sa5+,opera10.5+,chome实现了Array.isArray()方法
function isArray(value) {
if (typeof Array.isArray === "function") {
return Array.isArray(value);
} else {
return Object.prototype.toString.call(value) === "[object Array]";
}
}
8.5:检测属性;
// 以下三种不是检测属性是否存在,而是检测属性值是否存在,如果属性值为0 false null 则会出错
if (object[x]) {}
if (object[x] != null ) {}
if (object[x] != undefined) {}
// 判断属性最好用in,可以检测出属性存在,包括原型继承的属性都回返回true
var x={
count: 0;
related: null;
}
if ("count" in x) {}
// 如果检测实例属性(不包括原型继承的),则要用 object的hasOwnProperty(),如果对象是dom(IE8以下Dom对象并非继承自object)则
// 确订为非dom对象
if (x.hasOwnProperty("related")) {}
//不确定是否为dom对象
if ("hasOwnProperty" in object && object.hasOwnProperty("related")) {}
第九章:将配置数据从代码中分离出来
第十章:抛出自定义错误
第十一章:不是你的对象不要动
第十二章:浏览器嗅探
第十三章:文件和目录结构
第十四章:Ant
第十五章:校验
第十六章:文件合并和加工
第十七章:文件精简和压缩
第十八章:文档化
第十九章:自动化测试
第二十章:组装到一起
可维护的javascript的更多相关文章
- 《编写可维护的JavaScript》之编程实践
最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...
- 编写可维护的Javascript读书笔记
写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...
- 《编写可维护的javascript》读书笔记(中)——编程实践
上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...
- 《编写可维护的javascript》读书笔记(上)
最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...
- 编写可维护的JavaScript 收纳架
如果你看过Nicolas C.Zakas写过的任何作品,你必须承认他是个不折不扣的天才.也只有天才级的才能写出<JavaScript高级程序设计>让所有的前端攻城师人手一本.Nicolas ...
- 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)
本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ...
- 编写可维护的JavaScript之编程风格
在团队中只有每个人的编程风格一致,大家才能方便的互相看懂和维护对方的代码. 1. 层级缩进 对于层级缩进目前有两种主张:1)使用制表符这种方法有两种好处,第一,制表符和缩进层级之间是一一对应关系,符合 ...
- 《编写可维护的JavaScript》 笔记
<编写可维护的JavaScript> 笔记 我的github iSAM2016 概述 本书的一开始介绍了大量的编码规范,并且给出了最佳和错误的范例,大部分在网上的编码规范看过,就不在赘述 ...
- 编写可维护的JavaScript代码(部分)
平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ...
- 推荐一本好书:编写可维护的JavaScript(可下载)
目录 推荐一本好书:编写可维护的JavaScript(可下载) 书摘: 下载: 有些建议: 推荐一本好书:编写可维护的JavaScript(可下载) 书摘: 很多设计模式就是为了解决紧耦合的问题.如果 ...
随机推荐
- EBS 追前台最后一个执行的sql
首先 从前台获取sid 然后 获取sql地址 ; 最后 获取sql文本 select * from v$sqltext_with_newlines t where t.ADDRESS = '07000 ...
- WebBrowser打开Word文档的一些注意事项
WebBrowser打开Word文档的一些注意事项 分类: C#word2010-03-31 21:26 5640人阅读 评论(3) 收藏 举报 webbrowser文档browser工具object ...
- jQuery Mobile 表单基础
jQuery Mobile 会自动为 HTML 表单添加优异的便于触控的外观. jQuery Mobile 表单结构 jQuery Mobile 使用 CSS 来设置 HTML 表单元素的样式,以使其 ...
- 16.10.16学到的JAVA知识
1. 每个字节就是八位,所以每个字节的取值范围是 -128~127,它可以保存一个英文字符,包括字母,数字和英文标点.而汉字的的数量很多,一个字节没法把所有的汉字表达出来,所以汉字就是用两个字节来存 ...
- 伸缩盒 Flexible Box(旧)
box-orient box-pack box-align box-flex box-flex-group box-ordinal-group box-direction box ...
- IIS上虚拟目录下站点的web.config与根站点的web.config冲突解决方法
IIS7.5上在站点下部署虚拟目录,访问虚拟目录下的项目提示与父节点配置冲突.,节点与的<system.web>节点与主站点的<system.web>冲突解决方法: 在站点下的 ...
- Mysql插入数据为何要加上" ` "(Esc下面那个按键符号)?
资料上和以前学习的SQL语言,往数据库里面插入数据语句是这样的 INSERT INTO test_table (clo_1, col_2) VALUES("this is value of ...
- 【windows 下安装 mysql-server 无法登录问题解决】
----------------------------- 无感的首行 ----------------------------- 新版 mysql-server 5.7 安装后发现无法使用 mysq ...
- 选择本地照片之后即显示在Img中(客户体验)
最近转战MVC项目,然后又再次遇到照片上传的实现,之前都是使用ASP.NET,虽然也有照片上传,而且出于客户体验考虑, 也实现了选择本地照片之后即时显示在IMG中,在这里就简单介绍其实现(ASP.NE ...
- SEO和SEM的区别
SEO是属于SEM的一部分,SEO和SEM最主要的是最终目标的不同: SEO主要是为了关键词的排名.网站的流量.网站的结构.搜索引擎中页面收录的数据. SEM是通过SEO技术基础上扩展为搜索引擎中所带 ...