而使用:
var items = [12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ]; items.length; // return 11items.splice(3,1) ; items.length; // return 10/* items will be equal to [12, 548, "a", 5478, "foo", 8852, undefined × 1, "Doe", 2154, 119] */delete 方法应该被用来删除一个对象的某个属性。
21. 使用 length 来截短一个数组跟上面的清空数组的方式类似,我们使用 length 属性来截短一个数组。
var myArray = [12 , 222 , 1000 , 124 , 98 , 10 ]; myArray.length = 4; // myArray will be equal to [12 , 222 , 1000 , 124].此外,如果你将一个数组的 length 设置成一个比现在大的值,那么这个数组的长度就会被改变,会增加新的 undefined 的项补上。 数组的 length 不是一个只读属性。
myArray.length = 10; // the new array length is 10myArray[myArray.length - 1] ; // undefined22. 使用逻辑 AND/OR 做条件判断var foo = 10; foo == 10 && doSomething(); // 等价于 if (foo == 10) doSomething(); foo == 5 || doSomething(); // 等价于 if (foo != 5) doSomething();逻辑 AND 还可以被使用来为函数参数设置默认值
function doSomething(arg1){ Arg1 = arg1 || 10; // 如果arg1没有被设置的话,Arg1将被默认设成10 }23. 使用 map() 方法来遍历一个数组里的项var squares = [1,2,3,4].map(function (val) { return val * val; });// squares will be equal to [1, 4, 9, 16]24. 四舍五入一个数字,保留N位小数var num =2.443242342;num = num.toFixed(4); // num will be equal to 2.443225 – 浮点数问题0.1 + 0.2 === 0.3 // is false9007199254740992 + 1 // is equal to 90071992547409929007199254740992 + 2 // is equal to 9007199254740994为什么会这样? 0.1+0.2 等于 0.30000000000000004。你要知道,所有的 JavaScript 数字在内部都是以 64 位二进制表示的浮点数,符合IEEE 754 标准。更多的介绍,可以阅读这篇博文。你可以使用 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 1console.log(b); // b is equal to 9928. 缓存需要计算和查询(calculation or querying)的变量对于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) ; // falseisFinite("foo"); // falseisFinite("10"); // trueisFinite(10); // trueisFinite(undifined); // falseisFinite(); // falseisFinite(null); // true !!!30. 避免数组中的负数索引(negative indexes)var numbersArray = [1,2,3,4,5]; var from = numbersArray.indexOf("foo") ; // from is equal to -1numbersArray.splice(from,2); // will return [5]确保调用 indexOf 时的参数不是负数。
31. 基于JSON的序列化和反序列化(serialization and deserialization)var person = {name :'Saad', age : 26, department : {ID : 15, name : "R&D"} }; var stringFromPerson = JSON.stringify(person); /* stringFromPerson is equal to "{"name":"Saad","age":26,"department":{"ID":15,"name":"R&D"}}" */ var personFromString = JSON.parse(stringFromPerson); /* personFromString is equal to person object */32. 避免使用 eval() 和 Function 构造函数