改善 JavaScript 的建议——语言基础
文章目录
1. 减少全局变量污染
建议:在应用程序中创建唯一一个全局变量,定义该变量为当前应用的容器
1 2 3 4 5 6 7 8 9 |
var My = {}; My.name = 'wenzhixin'; My.work = { number: 123, list: [{ name: 'web', time: '2010.05.01' }] }; |
2. 变量声明
建议:在函数体顶部声明可能用到的所有变量
1 2 3 4 5 6 7 8 |
function test() { var a = 1, b = 'wen', c = { name: 'zhixin' }; // use a, b ,c } |
3. 慎用 JavaScript 类型自动转换、运算符
建议:明确变量类型,使用 === 来进行比较,不用 ==
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var a = 1, b = '1'; if (a == b) { // } //or if (a === b) { // } //or switch (b) { case 1: // } 0 == ''; //true '' == '0'; //false 0 == '0'; //true |
4. 避免误用 parseInt
建议:强制使用基数参数 parseInt(str, base)
1 2 3 |
parseInt('08'); //0 parseInt('09'); //0 parseInt('09', 10); //9 |
5. 防止自动插入分号
建议:完整的语句都增加分号以表示句子结束,将 { 放于语句尾部
1 2 3 4 5 6 7 |
// 相当于 return; function test() { return { status: true }; } |
6. 不要过于信任 hasOwnProperty
建议:防止 hasOwnProperty 方法是否被重定义
1 2 3 4 5 6 7 8 9 |
var obj = { name: 'test', hasOwnProperty: null }; for (var key in obj) { if (obj.hasOwnProperty(key)) { //error } } |
7. 谨记对象非空特性
建议:使用 hasOwnProperty 和 typeof 来检查成员
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var arr = ['on', 'off', 'constructor', 'on', 'off', 'constructor'], i, word, count = {}; for (i = 0; i < arr.length; i++) { word = arr[i]; if (count[word]) { count[word] += 1; } else { count[word] = 1; } } console.log(count['on']); //3 console.log(count['off']); //3 console.log(count['constructor']); //function Object(){[native code]} //use: if (typeof count[word] === 'number') { } |
8. 谨慎使用伪数组
建议:使用 constructor 判断是否为数组
1 2 3 4 5 |
function isArray(value) { return value && typeof value === 'object' && value.constructor === Array; } console.log(isArray(arguments)); |
9. 避免使用 with
建议: 不使用 with
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var name = 'wenyi', obj = { name = 'wenzhixin', age = 26 }; with (obj) { alert(name); //速度慢 alert(age); } with (obj) { a = b; //结果不可预料 } |
10. 不滥用 eval
建议: 尽量不使用 eval
1 2 |
eval('value = obj.' + key + ';'); //错的写法 value = obj[key]; //对的写法 |
11. 块标志并非多余
建议:单行语句也加上大括号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
if (0) if (1) alert(1); else alert(0); //实际上使用最近原则解析 if (0) if (1) alert(1); else alert(0); //应该加上大括号 if (0) { if (1) { alert(1); } } else { alert(0); } |
12. 避免条件结构的多重嵌套
建议:使用排除法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
//多重嵌套 if (a) { if (b) { if (c) { if (d) { alert('所有成立'); } else { alert('d不成立'); } } else { alert('c不成立'); } } else { alert('b不成立'); } } else { alert('a不成立'); } //排除法 if (!a) { alert('a不成立'); return; } if (!b) { alert('b不成立'); return; } if (!c) { alert('c不成立'); return; } if (!d) { alert('d不成立'); return; } alert('所有成立'); |
文章作者 wenzhixin
上次更新 2013-03-27