传说中超实用的JavaScript技巧

1.使用===替换==

Javascript有两组相等运算符,一组是==和!=,另一组是===和!==。前者只比较值的相等,后者除了值以外,还比较类型是否相同。

请尽量不要使用前一组,永远只使用===和!==。因为==默认会进行类型转换,规则十分难记。

<span style="font-family: Helvetica, Tahoma, Arial, sans-serif;"></span>false == 'false'      // false
false == undefined    // false
false == null         // false
null == undefined     // true
0 == ''               // true<span style="font-family: Helvetica, Tahoma, Arial, sans-serif;"></span>


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);


转自http://blog.csdn.net/yooungt13/article/details/17965705

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值