JAVASCRIPT书写规范
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.
var x = 10,
6.
y = 100;
7.
8.
// Will output 'true true'
9.
log((w.x === undefined) + ' ' + (w.y === undefined));
10.
11. }(window.console.log, window));
IIFE(立即执行的函数表达式)
page 制作要求:
1、弹窗:按设计图还原即可,不用考虑弹窗的位置。 2、对于网页代码,一定要保持足够的精简,拷贝的无用代码一定要 删除。 3、标签的语义化,不能滥用标签。 4、尽可能不用标签 ID 来控制样式。 后端:js 功能性修改,需要通知前端。
全局命名空间污染与 IIFE
总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以 创建独立隔绝的定义域。这一举措可防止全局命名空间被污染。
6. 7. 8.
推荐
1. 2. 3. 4. 5. 6.
// Your code starts here }());
(function(){ 'use strict'; // Your code starts here
}());
变量声明
总是使用 var 来声明变量。如不指定 var,变量将被隐式地声明为全局变量,这
x = false //这个代码看上去更不对头了,咋眼一看似乎下面的句都被执行了 //实际上只有 x=false 在 if 中 if(someVariableExists)
x = false anotherFunctionCall(); 所以,要记住的原则是:1.永远不要省略分号;2.不要省略花括号, 除非在同一行中。
将对变量难以控制。如果没有声明,变量处于什么定义域就变得不清(可以是在 Document 或 Window 中,也可以很容易地进入本地定义域)。所以,请总是 使用 var 来声明变量。 采用严格模式带来的好处是,当你手误输入错误的变量名时,它可以通过报错信 息来帮助你定位错误出处。
var current = null; function init(){...} function change(){...} function verify(){...} })(); //如果变量和函数需要在“外面”引用,需要把你的变量和函数放在一 个“命名空间”中 //我们这里用一个 function 做命名空间而不是一个 var,因为在前者 中声明 function 更简单,而且能保护隐私数据 myNameSpace = function(){ var current = null; function init(){...}
推荐
1. (function(){}());
so,用下列写法来格式化你的 IIFE 代码:
1. (function(){
2.
'use strict';
3.
4.
// Code goes 外层 IIFE 的变量,可以通过下列方式传参:
1. (function($, w, d){
function change(){...} function verify(){...} //所有需要在命名空间外调用的函数和属性都要写在 return 里面 return{
init:init, //甚至你可以为函数和属性命名一个别名 set:change } }(); 20.声明变量的话,总是用 var JavaScript 中的变量可能是全局域或者局部域,用 var 声明的话会更 加直观。 21.避免使用 eval()方法(ajax 数据请求验证) JavaScript 中的 eval()方法是在运行时把任何代码当作对象来计算/ 运行的方法。实际上由于安全性的缘故,大部分情况下都不应该用 eval(),总是有一种更“正确”的方法来完成同样的工作的。基本原则 是,eval is evil,在任何时候都不要用它,除非你是一个老手,并且 知道你不得不这样做。 22.不要偷懒省略”和{} 从技术上说,你可以忽略很多花括号和分号。 //虽然看上去很不对头,大部分浏览器都能正确解析这段代码 if(someVariableExists)
//这样是 OK 的 if(2 + 2 === 4) return 'nicely done';
23.获取对象属性的时候用方括号而不是点号 在 JavaScript 中取得某对象的属性有两种方法: //点号标记 MyObject.property
//方括号标记 MyObject["property"]
2.
'use strict';
3.
4.
$(function() {
5.
w.alert(d.querySelectorAll('div').length);
6.
});
7. }(jQuery, window, document));
严格模式
ECMAScript 5 严格模式可在整个脚本或独个方法内被激活。它对应不同的 javascript 语境会做更加严格的错误检查。严格模式也确保了 javascript 代码更 加的健壮,运行的也更加快速。
推荐
1. // We declare a IIFE and pass parameters into the function that we will use from the
global space
2. (function(log, w, undefined){
3.
'use strict';
4.
/* 功能描述 参数描述 返回值 */ 2)单行的注释(放在行末尾) //注释 11. 注重与 html 分离, 减小 reflow, 注重性能. 12.Dom 中自定义的 class,以 j_classname 的形式 13.把外部 JavaScript 文件放在 HTML 底部,</body>的前面 14.优化循环(循环体中若有 Dom 操作,应该把 Dom 操作提到循环体 外;在同一作用域内,Dom 选择赋值给一局部变量。) 15.单引号和双引号 为了避免混乱,我们建议在 HTML 中使用双引号,在 JavaScript 中 使用单引号。 //html <img src="/blog/picture.gif" /> //JavaScript <script type="text/javascript"> document.write('<p>'); </script> //一段混用的 jQuery 代码
Javascript 书写规范: 1. 文件编码统一为 utf-8; 2. 书写过程过, 每行代码结束必须有分号; 3. 库引入: 原则上仅引入 jQuery 库; 4. 变量命名: 以下划线链接每个单词,类型_变量名; s:表示字符串; n:表示数字; b:表示逻辑; a:表示数组; r:表示正则表达式; f:表示函数; o:表示以上未涉及到的其他对象; 变量在作用域的顶部申明。 5.常量:全部大写,以下划线分隔 如网站的 URL,域,图片目录路径, js 和 css 用到的目录路径; 6. 类命名: 首字母大写, 驼峰式命名. 如 Comment; 7. 函数命名: 首字母小写驼峰式命名. 如 getUserName(); 8.类中私有方法,以下划线+方法名标注,私有方法不能在类外被调 用。 9. 命名语义化, 尽可能利用英文单词或其缩写; 10. 代码结构明了化, 加适量注释. 提高函数重用率; 1)大功能区块的功能描述(类,函数)
if(object.hasOwnProperty(key) { ...then do something...
} } 25.代码排版 缩进 tab 长度为 4 行长度 ,控制在可视范围内,以一个分号结束 花括号,如果是一个代码段,花括号紧跟在语句的后面 文件功能定义 base:网站常量
common:@我,自动延伸高,插入表情,统计字数,全选,收藏心 跳,分享站外,关注,弹窗,拖拽,top 至顶
严格模式会阻止使用在未来很可能被引入的预留关键字。
你应该在你的脚本中启用严格模式,最好是在独立的 IIFE 中应用它。避免在你 的脚本第一行使用它而导致你的所有脚本都启动了严格模式,这有可能会引发一 些第三方类库的问题。
不推荐
1. // Script starts here 2. 'use strict'; 3. 4. (function(){ 5.
$('h1').after('<div id="content"><h2>目录</h2><ol></ol></div>'); 16.使用更简单的格式来写 innerscript //早期的代码可能是这样的 <script type="text/javascript" language="javascript"> ... </script> //现在不用 language 属性了 <script type="text/javascript"> ... </script> 17.总是检查数据 要检查你的方法输入的所有数据,一方面是为了安全性,另一方面也 是为了可用性。用户随时随地都会输入错误的数据。这不是因为他们 蠢,而是因为他们很忙,并且思考的方式跟你不同。用 typeof 方法 来检测你的 function 接受的输入是否合法。 18.避免混入其他技术,js 不直接控制 css 详细的设置,可控制 classname 19.避免全局变量(类名空间 App.dialog.) 全局变量和全局函数是非常糟糕的。因为在一个页面中包含的所有 JavaScript 都在同一个域中运行。所以如果你的代码中声明了全局变 量或者全局函数的话,后面的代码中载入的脚本文件中的同名变量和 函数会覆盖掉(overwrite)你的。
IIFE 还可确保你的代码不会轻易被其它全局命名空间里的代码所修改(i.e. 第 三方库,window 引用,被覆盖的未定义的关键字等等)。
不推荐
1. var x = 10,
2.
y = 100;
3.
4. // Declaring variables in the global scope is resulting in global scope pollution. All
//糟糕的全局变量和全局函数 var current = null; function init(){...} function change(){...} function verify(){...}
解决办法有很多,Christian Heilmann 建议的方法是: //如果变量和函数不需要在“外面”引用,那么就可以使用一个没有名 字的方法将他们全都包起来。 (function(){
如果是用点号标记取得对象的属性,属性名称是硬编码,无法在运行
时更改;而用方括号的话,JavaScript 会求得方括号内值然后通过计 算结果来求得属性名。也就是说用方括号标记的方式,属性名称可以 是硬编码的,也可以是变量或者函数返回值。 //这样是不行的 MyObject.value+i //这样就没有问题 MyObject["value"+i] 24.for in 语句遍历一个对象中的所有条目的时候,用 for in 语句是非 常方便的。但有时候我们不需要遍历对象中的方法,如果不需要的话, 可以加上一条 filter。 //加上了一个过滤器的 for in 语句 for(key in object) {
无论何时,想要创建一个新的封闭的定义域,那就用 IIFE。它不仅避免了干扰, 也使得内存在执行完后立即释放。
所有脚本文件建议都从 IIFE 开始。
立即执行的函数表达式的执行括号应该写在外包括号内。虽然写在内还是写在外 都是有效的,但写在内使得整个表达式看起来更像一个整体,因此推荐这么做。
不推荐
1. (function(){})();
variables declared like this
5. // will be stored in the window object. This is very unclean and needs to be avoided.
6. console.log(window.x + ' ' + window.y);