传说中超实用的JavaScript技巧

来源:互联网 发布:win7软件图标异常 编辑:程序博客网 时间:2024/04/29 02:32

1.使用===替换==

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

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

false == 'false'      // falsefalse == undefined    // falsefalse == null         // falsenull == undefined     // true0 == ''               // 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其他博主分享。



.


0 0
原创粉丝点击