《javascript模式--by Stoyan Stefanov》书摘--基本技巧
一、基本技巧
1,变量释放的副作用
a、使用var创建的全局变量(在函数外部创建)不能删除。
b、不使用var创建的隐含全局变量(尽管在函数内部创建)可以删除。
// 定义三个全局变量
var global_var = 1;
global_novar = 2; // 反模式
(function(){
global_fromfunc = 3; // 反模式
}()) // 企图删除
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true // 测试删除情况
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_var; // "undefined"
在ES5 stick模式中,没有声明的变量赋值会报出错误(如上两种反模式)
2、只使用一个var并初始化为变量赋初值(提供一个单一的地址以查找函数需要的所有局部变量)
3、for循环
优化操作原因:
a、使用了最少的变量
b、逐步减至0,这样通常更快,因为同0比较比同数组的长度比较,或同非0数组比较更有效率
// 优化前
function () {
var i = 0,
max ,
myarray = [];
// ....
for ( i = 0, max = myarray.length, i < max; i++ ) {
// 处理 myarray[i]
}
}
// 优化后 var i , myarray = [];
for ( i = myarray.length; i-- ) {
//处理 myarray[i]
} //优化后 使用while循环 var myarray = [],
i = myarray.length;
while ( i--) {
//处理 myarray[i]
}
4、for-in循环(调用函数)
var i,
hasOwn = Object.prototype.hasOwnProperty;
for ( i in man ) {
if ( hasOwn.call( man, i ) ) {
console.log(i, ":", man[i]);
}
}
5、内置的原型
if ( typeof Object.prototype.myMethod !== "function" ) {
Object.prototype.myMethod = function (){
// todo
}
}
6、避免使用eval(类似的还有setInterval(), setTimeout(), function())
// 反模式
var property = "name";
alert(eval( "obj." + property)); // 推荐的方法
var property = "name";
alert(obj[property]); // 反模式
setTimeout("myFunc()", 1000);
setTimeout("myFunc(1, 2, 3)", 1000); // 推荐的模式
setTimeout(myFunc(), 1000);
setTimeout(function () {
myFunc(1, 2, 3)
}, 1000);
7、转换字符为数字
// parseInt()必须指定进制参数,否则遇到以0开头的解析为八进制
var month = "06",
year = "09";
month = parseInt(month, 10);
year = parseInt(year, 10); // 另外一个字符串转换为数值的方法
+"08" //结果是8
Number("08") //
// 这样更快,但如果有字符就只能用parseInt(),其他都会失败并返回NaN
8、开放的大括号的位置(应放在前面语句同一行)
// 警告:夫预期的返回值
function func () {
return
{
name : "finder"
};
} // 等价于下面的形式
// 警告:夫预期的返回值
function func () {
return undefined;
// 并未访问到接下来的代码
{
name : "finder"
};
} // 总上,推荐以下写法
function func () {
return {
name : "finder"
};
}
9、空格
a、在函数中使用大括号开始符之前,例如if-else语句,循环语句和对象字面量等。
b、在大括号结束符和else或while之间
10、命名约定
a、构造函数首字母大写
b、使用下划线约定的变量:
- 使用下划线说明是私有变量
- 使用一个下划线标识受保护属性,使用两个下划线标识私有属性。
- Firefox有一个属性,__proto__and__parent__
11、编写API文档
YUIDoc(Yahoo! User Interface )系统是一个和语言无关的系统,它仅仅解析注释的部分,而不解析javascript代码,缺点在于不得不在注释中声明属性名,参数名和方法名,例如@property first_name.而优点在于一旦适应了使用该系统进行注释,就可以使用该系统为任何其他语言的代码编写注释。
12、编写可读性强的代码
13、同行互查(cvs/svn/git)
14、在正式发布时精简代码
工具:YUICompress/Closure Compiler
15、运行JSLint
由javascript编写,可以作为 web工具使用,也可以下载下来并使用WSH(Windows Scripting Host)、JSC(Mac OSX的javascriptCore)、Rhino(Mozilla推出的javascript解析器)以在本地运行。
《javascript模式--by Stoyan Stefanov》书摘--基本技巧的更多相关文章
- 《javascript模式--by Stoyan Stefanov》书摘--汇总
<javascript模式--by Stoyan Stefanov>书摘--基本技巧 http://www.cnblogs.com/liubei/p/JavascriptModeLog1. ...
- 《javascript模式--by Stoyan Stefanov》书摘--字面量和构造函数
二.字面量和构造函数 1,能够使用对象字面量时,就没理由使用new Object构造函数 // 一个空对象var 0 = new Object();console.log( o.constructor ...
- 《javascript模式--by Stoyan Stefanov》书摘--函数
三.函数 1.函数的命名属性 // IE下不支持name属性 var foo = function bar () { // todo }; foo.name; // "bar" 2 ...
- 《JavaScript模式》第2章 基本技巧
@by Ruth92(转载请注明出处) 第2章 基本技巧 一.编写可维护的代码 阅读性好 具有一致性 预见性好 看起来如同一个人编写 有文档 编写注释 编写 API 文档 @namespace:用于命 ...
- javascript 模式(1)——代码复用
程序的开发离不开代码的复用,通过代码复用可以减少开发和维护成本,在谈及代码复用的时候,会首先想到继承性,但继承并不是解决代码复用的唯一方式,还有其他的复用模式比如对象组合.本节将会讲解多种继承模式以实 ...
- 【读书笔记】读《JavaScript模式》 - 函数复用模式之现代继承模式
现代继承模式可表述为:其他任何不需要以类的方式考虑得模式. 现代继承方式#1 —— 原型继承之无类继承模式 function object(o) { function F() {}; F.protot ...
- 【读书笔记】读《JavaScript模式》 - 函数复用模式之类式继承模式
实现类式继承的目标是通过构造函数Child()获取来自于另外一个构造函数Parent()的属性,从而创建对象. 1.类式继承模式#1 —— 默认方式(原型指向父函数实例) function Paren ...
- 初涉JavaScript模式系列 阶段总结及规划
总结 不知不觉写初涉JavaScript模式系列已经半个月了,没想到把一个个小点进行放大,竟然可以发现这么多东西. 期间生怕对JS的理解不到位而误导各位,读了很多书(个人感觉JS是最难的oo语言),也 ...
- 【前端】javascript中10常用的个小技巧总结
javascript中10常用的个小技巧总结 本文转自:http://www.cnblogs.com/libin-1/p/6756393.html 1. new Set() 可能有人知道ES6中提供了 ...
随机推荐
- oracle编程300例-性能优化(一)
1.在SELECT语句中避免使用“*” 2.尽可能减小记录行数 3.使用rowid高效删除重复记录 实例: delete from stu s where s.rowid>(select min ...
- Linux基础命令之文件和目录操作(一)
pwd print working directory的缩写,作用是显示当前工作目录的绝对路径,一般进行频繁切换路径时使用. -L 显示逻辑路径(或略软链接文件),不常用. -P 显示物理路径,不常用 ...
- 红帽RHEL6.8离线环境下升级到RHEL7.3
Red Hat Enterprise Linux 7 (RHEL 7) 是第一个支持从前一个 RHEL 主发行版本(RHEL 6)进行原位(in-place)升级的 RHEL 主版本.原位升级(in- ...
- $.extend() 合并问题
- 4 二维数组中的查找 JavaScript
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- HTML5中的拖拽与拖放(drag&&drop)
1.drag 当拖动某个元素时,将会依次触发下列事件: 1)dragstart:按下鼠标键并开始移动鼠标时,会触发该事件 2)drag:dragstart触发后,随即便触发drag事件,而且在元素被拖 ...
- ASP.NET Core学习网站推荐
跟大家推荐一个不错的学习.NET Core 的网站,这个网站的视频是付费的,但是录视频的都是.NET Core的大佬们,个人觉得很不错推荐出来 video.jessetalk.cn
- python3 安装pyhanlp方法
直接pip install pyhanlp的时候会提示缺少Microsoft Visual c++环境, 其实没有Microsoft Visual c++环境也是可以的, 可以先安装jpype1,然后 ...
- A1092
可输入内容为0-9,a-z,A-Z. 输入: 第一行输入任意字符串: 第二行输入期望字符串. 输出: 如果第一行包含了所有期望字符串,输出yes和多余字符个数: 如果第一行不能完全包含期望字符串,输出 ...
- Shuffling Machine
7-43 Shuffling Machine(20 分) Shuffling is a procedure used to randomize a deck of playing cards. Bec ...