改善 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