JavaScript基本编码模式小结_基础知识

无论编写任何程序都会接触到编码风格,设计模式等概念,编码风格一般侧重于书写规范,而设计模式则偏向于程序架构设计。本文中笔者整理的这些“模式”包含了编写JavaScript代码时一些常用的方法或者小技巧,可以帮助初学JavaScript的同学迅速提升代码质量。当然,在此之前首先要保证规范的书写习惯,在此之上可以再将本文介绍的知识点运用到代码编写中,则可以大大提升代码质量。
下面是笔者整理的一些点,没有什么逻辑顺序,想到哪儿写到哪儿了,不足之处欢迎大家补充指正。
1. 变量定义

复制代码 代码如下:

// 一般写法
var a = 0;
var b = 1;
var c = 'xxx';
// 推荐写法
var a = 0,
b = 1,
c = 'xxx';

2. 尽量使用字面量

复制代码 代码如下:

// 一般写法
var obj = new Object();
obj.a = 'aa';
obj.b = 'bb';
obj.c = 'cc';
var arr = new Array();
// 推荐写法
var obj = {
a: 'aa',
b: 'bb'
};
var arr = [];
function getXX(index){
return ['aa', 'bb', 'xx', 55, 'xxb'](index);
}
function getMessage(code){
return {
404: 'xxx',
500: 'xxx'
}[code];
}

3. 正则字面量

复制代码 代码如下:

var regex = new RegExp('someting');
// 当正则表达式可能变化时才使用构造函数
var cls = 'someclass',
regex = new RegExp(cls + '\\s*', 'ig'); // only for dynamic regexs
// 其他情况均使用字面量
var regex = /someting/ig;

4. 设置默认值

复制代码 代码如下:

// Default values
var arg = arg || 'default'; // fallback
document.getElementById('test').onclick = function(event){
var event = event || window.event;
};
function getX(a){
return a+1 || 'default';
}

5. 条件判断

复制代码 代码如下:

// Conditions
answer = obj && obj.xx && obj.xx.xxx;
// 连续判断
if(obj && obj.xx && obj.xx.xxx){
// do something
}
if(obj.xx){
// do something
}
if(!obj){
// do something
}
// 使用全等判断
if(a === b){
// do something
}
// 尽量不检测浏览器,仅检测要使用的特性是否支持
if(document.getElementById){
// ability detect
}

6. 三元操作符

复制代码 代码如下:

// Ternary
check ? value1 : value2;
// 三元操作符更简洁
var foo = (condition) ? value1 : value2;
function xx(){
if(condition){
return value1;
}else{
return value2;
}
}
function xx(){
return (condition) ? value1 : value2;
}
// 格式化三元操作符
foo = predicate ? "one" :
predicate ? "two" :
"default"; // format

7. 插入迭代值

复制代码 代码如下:

// Insert iteration
var name = value[i];
i++;
// 直接将迭代值插入
var name = value[i++];

8. DOM操作

复制代码 代码如下:

// DOM Operation
el.style.display = 'none'; // offline
// operation
el.style.display = 'block';
// 使用文档碎片操作更好
var fragment = document.createDocumentFragment(); // better
el.innerHTML = ''; // fast remove all children, but may leaks memory
el.innerHTML = 'xxx'; // ok, use it!
// 小心处理NodeList
var images = document.getElementsByTagName('img'); // be careful! dynamic list

9. 事件代理

复制代码 代码如下:

// 使用事件代理,在更外层的元素上监听事件
document.getElementById('list').onclick = function(evt){
var evt = evt || window.event,
target = evt.target || evt.srcElement;
if(target.id === 'btn1'){
// do something
}
}

10. 命名空间

复制代码 代码如下:

// An Object as a Namespace
var MYAPP = {};
MYAPP.dom.get = function(id){};
MYAPP.style.css = function(el, style){};
MYAPP.namespace('event');

11. 链式操作

复制代码 代码如下:

// Chaining operation: return this
function setValue(el, value){
el.value = value;
return this;
}
var obj = new MYAPP.dom.Element('span');
obj.setText('hello')
.setStyle('color', 'red')
.setStyle('font', 'Verdana');

12. 私有作用域

复制代码 代码如下:

// Function
(function(){
var _private = 'cant see me';
})();
(function($){
$('#xxb').click(function(){ });
})(jQuery);

13. 配置对象

复制代码 代码如下:

// Configure Object
function foo(id, conf, null , null){
// do somethin
}
foo('bar', {
key1 : 1,
key2 : 2
});

14. 类型转换

复制代码 代码如下:

// Type Conversion
+'010' === 10;
Number('010') === 10;
parseInt('010', 10) === 10;
10 + '' === '10';
+new Date() // timestamp
+new Date;

15. 扩展原型

复制代码 代码如下:

// 仅在需要向前兼容时才使用,其他情况不建议扩展原型对象
Array.prototype.forEach = function(){
// only for forward compatible
};

16. 循环优化

复制代码 代码如下:

// 缓存
for(var i=0, j = document.getElementsByTagName('a').length; i0; i--){
// maybe faster
}
// 据说是最快的
while(i--){
// maybe fastest
}

17. 尽量使用新特新

复制代码 代码如下:

Array.forEach();
getElementsByClassName();
querySlectorAll();
// 首先检测是否支持新特性,能用就用
if(document.getElementsByClassName){
// use
}else{
// your implementations
}

18. 惰性载入

复制代码 代码如下:

// 只判断一次,再次调用该函数则无需判断
function lazyDef(){
if(condition1){
lazyDef = function(){ };
}else if(condition2){
lazyDef = function(){ };
}
return lazyDef();
}

19. 私有函数与公共方法

复制代码 代码如下:

var MYAPP = {};
MYAPP.dom = (function(){
var _setStyle = function(el, prop, value){
console.log('setStyle');
};
return {
setStyle: _setStyle
};
})();
// 当 MYAPP.dom.setStyle 不慎被覆写时,_setStyle在内部仍然可用

20. 调试

复制代码 代码如下:

// 尽量使用,可以传入多个参数,最后输出拼接后的字符串
console.log('xx','xx','...');
console.dir(someObj);
console.dirxml(someDom);
console.time('timer');
console.warn('xxx');
// 封装可以保证不小心发布出去也不会导致问题,但报错时行号可能有问题
function msg(msg){
if(console && console.log){
console.log(msg); // wrong line number
}
}

基本上目前想到的只有这些,欢迎大家补充讨论:)

时间: 2025-01-25 12:14:41

JavaScript基本编码模式小结_基础知识的相关文章

详解JavaScript的策略模式编程_基础知识

 我喜欢策略设计模式.我尽可能多的试着去使用它.究其本质,策略模式使用委托去解耦使用它们的算法类. 这样做有几个好处.他可以防止使用大条件语句来决定哪些算法用于特定类型的对象.将关注点分离开来,因此降低了客户端的复杂度,同时还可以促进子类化的组成.它提高了模块化和可测性.每一个算法都可以单独测试.每一个客户端都可以模拟算法.任意的客户端都能使用任何算法.他们可以互调.就像乐高积木一样. 为了实现策略模式,通常有两个参与者: 该策略的对象,封装了算法. 客户端(上下文)对象,以即插即用的方式能使用

JavaScript之编码规范 推荐_基础知识

一.命名 1.应给变量和函数取一个含义确切的名称,不要随意命名. 2.非构造函数采用驼峰命名法,尽量采用动宾结构,以与变量名相区别,如getName或IsFull.构造函数(即自定义类型)名称首字母大写,以与非构造函数相区别,如Person. 3.变量采用驼峰命名法.由于JavaScript是一种弱类型语言,因此建议在变量名称前加前缀:整形(i),浮点数(f),布尔型(b),字符串(s),数组(a).但不强制这么做,可根据个人爱好选择,选择好后就不要混用加前缀和不加前缀这两种方式了. 二.布局

json的使用小结_基础知识

JSON的用途 使用基于JavaScript的应用程序,其中包括浏览器扩展和网站 使用JSON格式序列化和结构化的数据传输网络连接 这主要用于服务器和Web应用程序之间的数据传输 Web服务和API采用JSON格式提供公共数据 它可以用来与现代编程语言 JSON的特点 易于读写JSON 轻量级的基于文本的交换格式 独立语言 JSON格式示例: •名称/值对数据表示 •大括号持有的对象和每个名称后跟":"(冒号),名称/值对的分离,(逗号) •方括号持有数组和值,(逗号)分隔. { &q

JavaScript方法和技巧大全_基础知识

这篇介绍JavaScript方面的日志,我在是Clang上看到的.作者介绍挺全面的,所以转载过来让感兴趣的朋友看一下.呵呵--- 有些时候你精通一门语言,但是会发现你其实整天在和其它语言打交道,也许你以为这些微不足道,不至于影响你的开发进度,但恰恰是这些你不重视的东西会浪费你很多时间,我一直以为我早在几年前就已经精通JavaScript了,直到目前,我才越来越觉得JavaScript远比我想象的复杂和强大,我开始崇拜它,就像崇拜所有OOP语言一样- 趁着节日的空隙,把有关JavaScript的方

浅谈JavaScript中的字符编码转换问题_基础知识

要获得字符的Unicode编码,可以使用string.charCodeAt(index)方法,其定义为:    strObj.charCodeAt(index)       index为指定字符在strObj对象中的位置(基于0的索引),返回值为0与65535之间的16位整数.例如: var strObj = "ABCDEFG"; var code = strObj.charCodeAt(2); // Unicode value of character 'C' is 67      

写给想学习Javascript的朋友一点学习经验小结_基础知识

当然只是个人的经验,有什么不对的也请高手见谅和指正. 关于到培训学校学习的忠告:别说现在没有这样的学校,就是有专门的学校也不要去,因为不会有好的老师的.不要浪费你自己(很可能是你父母)的钱和时间.趁早死了这个念头. 关于培训学校的这个我想我要比一般的朋友更有发言权,因为我本人干英语培训将近2年,我很清楚培训市场的情况,你很难碰到一个好的老师.英语可能还好些,毕竟英语说得好的老师还比较多,长期跟老外泡在一起,确实对口语能力的提高很显著,但是代价是很昂贵的.而你现在要学的是Javascript,呵呵

总结JavaScript设计模式编程中的享元模式使用_基础知识

享元模式不同于一般的设计模式,它主要用来优化程序的性能,它最适合解决大量类似的对象而产生的性能问题.享元模式通过分析应用程序的对象,将其解析为内在数据和外在数据,减少对象的数量,从而提高应用程序的性能. 基本知识 享元模式通过共享大量的细粒度的对象,减少对象的数量,从而减少对象的内存,提高应用程序的性能.其基本思想就是分解现有类似对象的组成,将其展开为可以共享的内在数据和不可共享的外在数据,我们称内在数据的对象为享元对象.通常还需要一个工厂类来维护内在数据. 在JS中,享元模式主要有下面几个角色

JavaScript操作Cookie详解_基础知识

什么是 Cookie "cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回 cookie 的值." - w3school cookie 是访问过的网站创建的文件,用于存储浏览信息,例如个人资料信息. 从JavaScript的角度看,cookie 就是一些字符串信息.这些信息存放在客户端的计算机中,用于客户端计算机与服务器之间传递信息. 在JavaScript中可以通过 doc

学习JavaScript的最佳方法分享_基础知识

学习新的东西是件可怕的事.对我来说,掌握一项新技能最大的问题是,我不知道自己懂什么.鉴于此,定个计划,学习你感兴趣的东西应该会有用.这篇文章的主旨就是:你为学习JavaScript 制定的蓝图.路线.行动计划!你不必担心找不到最好的资源,先整理些不好的资源,再确定下一步该学什么.遵循它,一步一步来. 任务0:了解什么是JavaScript 在你真正开始学习JavaScript 之前,花一分钟了解一下什么是JavaScript,它有哪些功能. JavaScript不是jQuery.Flash或Ja