JavaScript 最佳实践
-
JavaScript最佳实践
避免全局变量,避免new,避免==,避免eval() -
避免使用全局变量
最大限度地减少全局变量的使用。这包括所有数据类型,对象和函数。全局变量和函数可以被其他脚本覆盖。改为使用局部变量,并学习如何使用闭包。闭包在函数章节还有详细介绍。函数中使用的所有变量都应声明为局部变量。必须使用var关键字声明局部变量,否则它们将成为全局变量。严格模式不允许未声明的变量。
将所有声明放在每个脚本或函数的顶部是一种很好的编码实践。- 清理代码变量
- 提供单个位置来查找局部变量
- 更容易避免不需要的(隐含的)全局变量
- 减少不必要的重新声明的可能性
// 一开始就声明 var firstName, lastName, price, discount, fullPrice; // 之后使用 firstName = "John"; lastName = "Doe"; price = 19.90; discount = 0.10; fullPrice = price * 100 / discount;
这也适用于循环变量:// 一开始就声明 var i; // 之后使用 for (i = 0; i < 5; i++) {
默认情况下,JavaScript将所有声明移到顶部(变量提升)
-
-
不要使用new创建对象
- 用{}而不是new Object()
- 用""而不是new String()
- 用0而不是new Number()
- 用false而不是new Boolean()
- 用[]而不是new Array()
- 用/()/而不是new RegExp()
- 用function (){}而不是new Function()
尝试一下var x1 = {}; // 新对象 var x2 = ""; // 新的原始字符串 var x3 = 0; // 新的原始数字 var x4 = false; // 新的原始布尔值 var x5 = []; // 新的数组对象 var x6 = /()/; // 新的正则表达式对象 var x7 = function(){}; // 新函数对象
-
小心自动类型转换
请注意,数字可能会被意外转换为字符串或NaN(Not a Number)。JavaScript是弱类型语言。变量可以包含不同的数据类型,变量可以更改其数据类型:
尝试一下var x = "Hello"; // typeof x 是字符串 x = 5; // 将typeof x更改为数字
在进行数学运算时,JavaScript可以将数字转换为字符串:
尝试一下var x = 5 + 7; // x.valueOf()为12,typeof x为number var x = 5 + "7"; // x.valueOf()是57,typeof x是一个string var x = "5" + 7; // x.valueOf()是57,typeof x是一个string var x = 5 - 7; // x.valueOf()是-2,typeof x是一个number var x = 5 - "7"; // x.valueOf()是-2,typeof x是一个number var x = "5" - 7; // x.valueOf()是-2,typeof x是一个number var x = 5 - "x"; // x.valueOf()是NaN,typeof x是number
从字符串中减去字符串,不会生成错误但返回NaN(Not a Number):
尝试一下"Hello" - "Dolly" // 返回 NaN
-
使用===比较
==比较操作总是比较之前转换(匹配类型)。===运算符将值和类型进行对比:
尝试一下0 == ""; // true 1 == "1"; // true 1 == true; // true 0 === ""; // false 1 === "1"; // false 1 === true; // false
-
使用参数默认值
如果使用缺少的参数调用函数,则将缺少的参数的值设置为 undefined。undefined值可能会破坏您的代码。为参数分配默认值是一个好习惯。
尝试一下function myFunction(x, y) { if (y === undefined) { y = 0; } }
ECMAScript 2015允许函数调用中的默认参数:function (a=1, b=1) { // function code }
-
使用默认值结束您的switch
总是使用一个default结束你switch。即使你认为没有必要。
尝试一下switch (new Date().getDay()) { case 0: day = "Sunday"; break; case 1: day = "Monday"; break; case 2: day = "Tuesday"; break; case 3: day = "Wednesday"; break; case 4: day = "Thursday"; break; case 5: day = "Friday"; break; case 6: day = "Saturday"; break; default: day = "Unknown"; }
-
避免使用eval()函数
eval()函数用于将文本作为代码运行。几乎在所有情况下,都没有必要使用它。因为它允许运行任意代码,所以它也代表了安全问题。