1.使用===替换==
Javascript有两组相等运算符,一组是==和!=,另一组是===和!==。前者只比较值的相等,后者除了值以外,还比较类型是否相同。
请尽量不要使用前一组,永远只使用===和!==。因为==默认会进行类型转换,规则十分难记。
false == 'false' // false
false == undefined // false
false == null // false
null == undefined // true
0 == '' // true
2.避免使用with
with的本意是减少键盘输入。比如
x = Math.PI * Math.PI;
y = Math.LN10;
可以简写成
with(Math) {
x = PI * PI;
y = d;
}
但是,在实际运行时,解释器会首先判断Math.PI和Math.LN10是否存在,如果不存在的话,再判断全局变量PI和LN10是否存在。
这样就导致了低效率,而且可能会导致意外,因此最好不要使用with语句。
3.避免使用eval
eval用来直接执行一个字符串。这条语句也是不应该使用的,因为它有性能和安全性的问题,并且使得代码更难阅读。
eval能够做到的事情,不用它也能做到。比如
eval("myValue = myObject." + myKey + ";");
可以直接写成
myValue = myObject[myKey];
至于ajax操作返回的json字符串,可以使用官方网站提供的解析器json_parse.js运行。
4.定义function()
在Javascript中定义一个函数,有两种写法:
function foo() { }
和
var foo = function () { }
两种写法完全等价。
但是在解析的时候,前一种写法会被解析器自动提升到代码的头部,因此违背了函数应该先定义后使用的要求,所以建议定义函数时,全部采用后一种写法。
5.基本数据类型的包装对象
Javascript的基本数据类型包括字符串、数字、布尔值,它们都有对应的包装对象String、Number和Boolean。所以,有人会这样定义相关值:
new String("Hello World");
new Number(2000);
new Boolean(false);
这样写完全没有必要,而且非常费解,因此建议不要使用。
另外,new Object和new Array也不建议使用,可以用{}和[]代替。
6.应当小心使用typeof、instanceof和constructor
var arr = ["a", "b", "c"];
typeof arr; // return "object"
arr instanceof Array // return true
arr.constructor(); // return []
7.创建一个Self-calling函数
(function(){
// some private code that will be executed automatically
})();
(function(a,b){
var result = a+b;
return result;
})(10,20)
8.在特定范围里获得一个随机数
下面这段代码非常通用,当你需要生成一个假的数据用来测试时,比如在最低工资和最高之前获取一个随机值。
var x = Math.floor(Math.random() * (max - min + 1)) + min;
9.在数字0和最大数之间生成一组随机数
var numbersArray = [] , max = 100;
for( var i=1; numbersArray.push(i++) < max;); // numbers = [0,1,2,3 ... 100]
10.生成一组随机的字母数字字符
function generateRandomAlphaNum(len) {
var rdmstring = "";
for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2));
return rdmString.substr(0, len);
}
11.打乱数字数组
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
numbers = numbers.sort(function(){ return Math.random() - 0.5});
12.使用逻辑符号&&或者||设置函数参数的默认值
Function doSomething(arg1){
Arg1 = arg1 || 10; // arg1 will have 10 as a default value if it’s not already set
}
13.使用map()方法来遍历数组
var squares = [1,2,3,4].map(function (val) {
return val * val;
});
// squares will be equal to [1, 4, 9, 16]
14.浮点数问题
0.1 + 0.2 === 0.3 // is false
9007199254740992 + 1 // is equal to 9007199254740992
9007199254740992 + 2 // is equal to 9007199254740994
0.1+0.2等于0.30000000000000004,为什么会发生这种情况?
根据IEEE754标准,你需要知道的是所有JavaScript数字在64位二进制内的都表示浮点数。
开发者可以使用toFixed()和toPrecision()方法来解决这个问题。
15.使用for-in loop检查遍历对象属性
下面这段代码主要是为了避免遍历对象属性。
for (var name in object) {
if (object.hasOwnProperty(name)) {
// do something with name
}
}
16.不要向setTimeout()和setInterval()方法里传递字符串
如果在这两个方法里传递字符串,那么字符串会像eval那样重新计算,这样速度就会变慢,而不是这样使用:
setInterval('doSomethingPeriodically()', 1000);
setTimeOut('doSomethingAfterFiveSeconds()', 5000);
相反,应该这样用:
setInterval(doSomethingPeriodically, 1000);
setTimeOut(doSomethingAfterFiveSeconds, 5000);
以上所有内容来自CSDN其他博主分享。
.