JavaScript程序员应该知道的45个实用技巧(2)

var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
numbers = numbers.sort(function(){ return Math.random() - 0.5});
/* the array numbers will be equal for example to [120, 5, 228, -215, 400, 458, -85411, 122205]  */


13 – String的trim函数
在Java、C#、PHP和很多其他语言中都有一个经典的 trim 函数,用来去除字符串中的空格符,而在JavaScript中并没有,所以我们需要在String对象上加上这个函数。

复制代码 代码如下:


String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g, "");};//去掉字符串的前后空格,不包括字符串内部空格


14 – 附加(append)一个数组到另一个数组上

复制代码 代码如下:

var array1 = [12 , "foo" , {name: "Joe"} , -2458];

var array2 = ["Doe" , 555 , 100];
Array.prototype.push.apply(array1, array2);
/* array1 will be equal to  [12 , "foo" , {name "Joe"} , -2458 , "Doe" , 555 , 100] */
//其实concat可以直接实现两个数组的连接,但是它的返回值是一个新的数组。这里是直接改变array1

15 – 将arguments对象转换成一个数组

复制代码 代码如下:

var argArray = Array.prototype.slice.call(arguments);
arguments对象是一个类数组对象,但不是一个真正的数组


16 – 验证参数是否是数字(number)

复制代码 代码如下:

function isNumber(n){
    return !isNaN(parseFloat(n)) && isFinite(n);
}


17 – 验证参数是否是数组

复制代码 代码如下:

function isArray(obj){
    return Object.prototype.toString.call(obj) === '[object Array]' ;
}


注意:如果toString()方法被重写了(overridden),你使用这个技巧就不能得到想要的结果了。或者你可以使用:

复制代码 代码如下:


Array.isArray(obj); // 这是一个新的array的方法


如果你不在使用多重frames的情况下,你还可以使用 instanceof 方法。但如果你有多个上下文,你就会得到错误的结果。

复制代码 代码如下:

var myFrame = document.createElement('iframe');
document.body.appendChild(myFrame);

var myArray = window.frames[window.frames.length-1].Array;
var arr = new myArray(a,b,10); // [a,b,10]

// instanceof will not work correctly, myArray loses his constructor
// constructor is not shared between frames
arr instanceof Array; // false


18 – 获取一个数字数组中的最大值或最小值

复制代码 代码如下:

var  numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
var maxInNumbers = Math.max.apply(Math, numbers);
var minInNumbers = Math.min.apply(Math, numbers);
//译者注:这里使用了Function.prototype.apply方法传递参数的技巧


19 – 清空一个数组

复制代码 代码如下:

var myArray = [12 , 222 , 1000 ];
myArray.length = 0; // myArray will be equal to [].


20 – 不要使用 delete 来删除一个数组中的项。

使用 splice 而不要使用 delete 来删除数组中的某个项。使用 delete 只是用 undefined 来替换掉原有的项,并不是真正的从数组中删除。

不要使用这种方式:

复制代码 代码如下:

var items = [12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ];
items.length; // return 11
delete items[3]; // return true
items.length; // return 11
/* items will be equal to [12, 548, "a", undefined × 1, 5478, "foo", 8852, undefined × 1, "Doe", 2154,       119]   */


而使用:

复制代码 代码如下:

var items = [12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ];
items.length; // return 11
items.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 10
myArray[myArray.length - 1] ; // undefined


22 – 使用逻辑 AND/OR 做条件判断

复制代码 代码如下:

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

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