45个JavaScript编程注意事项、技巧大全(3)


var foo = 10; 
foo == 10 && doSomething(); // is the same thing as if (foo == 10) doSomething();
foo == 5 || doSomething(); // is the same thing as if (foo != 5) doSomething();


逻辑或还可用来设置默认值,比如函数参数的默认值。

复制代码 代码如下:


function doSomething(arg1){
    arg1 = arg1 || 10; // arg1 will have 10 as a default value if it's not already set
}


23、使得map()函数方法对数据循环

复制代码 代码如下:


  var squares = [1,2,3,4].map(function (val) { 
    return val * val; 
});
// squares will be equal to [1, 4, 9, 16]


24、保留指定小数位数

复制代码 代码如下:


  var num =2.443242342;
num = num.toFixed(4);  // num will be equal to 2.4432


注意,toFixec()返回的是字符串,不是数字。

25、浮点计算的问题

复制代码 代码如下:


  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。JavaScript的数字都遵循IEEE 754标准构建,在内部都是64位浮点小数表示,具体可以参见JavaScript中的数字是如何编码的.

可以通过使用toFixed()和toPrecision()来解决这个问题。

26、通过for-in循环检查对象的属性
下面这样的用法,可以防止迭代的时候进入到对象的原型属性中。

复制代码 代码如下:


  for (var name in object) { 
    if (object.hasOwnProperty(name)) {
        // do something with name
    } 
}


27、逗号操作符

复制代码 代码如下:


  var a = 0;
var b = ( a++, 99 );
console.log(a);  // a will be equal to 1
console.log(b);  // b is equal to 99


28、临时存储用于计算和查询的变量
在jQuery选择器中,可以临时存储整个DOM元素。

复制代码 代码如下:


  var navright = document.querySelector('#right');
var navleft = document.querySelector('#left');
var navup = document.querySelector('#up');
var navdown = document.querySelector('#down');


29、提前检查传入isFinite()的参数

复制代码 代码如下:


  isFinite(0/0) ; // false
isFinite("foo"); // false
isFinite("10"); // true
isFinite(10);   // true
isFinite(undefined);  // false
isFinite();   // false
isFinite(null);  // true,这点当特别注意


30、避免在数组中使用负数做索引

复制代码 代码如下:


  var numbersArray = [1,2,3,4,5];
var from = numbersArray.indexOf("foo") ;  // from is equal to -1
numbersArray.splice(from,2);    // will return [5]


注意传给splice的索引参数不要是负数,当是负数时,会从数组结尾处删除元素。

31、用JSON来序列化与反序列化

复制代码 代码如下:


  var person = {name :'Saad', age : 26, department : {ID : 15, name : "R&D"} };
var stringFromPerson = JSON.stringify(person);
/* stringFromPerson 结果为 "{"name":"Saad","age":26,"department":{"ID":15,"name":"R&D"}}"   */
var personFromString = JSON.parse(stringFromPerson);
/* personFromString 的值与 person 对象相同  */


32、不要使用eval()或者函数构造器
eval()和函数构造器(Function consturctor)的开销较大,每次调用,JavaScript引擎都要将源代码转换为可执行的代码。

复制代码 代码如下:


  var func1 = new Function(functionCode);
var func2 = eval(functionCode);


33、避免使用with()
使用with()可以把变量加入到全局作用域中,因此,如果有其它的同名变量,一来容易混淆,二来值也会被覆盖。

34、不要对数组使用for-in
避免:

复制代码 代码如下:


  var sum = 0; 
for (var i in arrayNumbers) { 
    sum += arrayNumbers[i]; 
}


而是:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgfxwj.html