1. for in是用来迭代对象的属性的,用来遍历数组可能会出现各种问题,所以还是用传统的for i=0; i<length;i++。
我在代码中看到的
| var modules = ['aaa','bbb']; for(var i in modules){ if (modules.hasOwnProperty(i)){ // do something here } } |
如果这样去遍历数组,则i的值是数组的索引0, 1, 2 ... 但是如果有人像下面这样修改了Array的原型,则for in就会挂掉。:
| Array.prototype.foo = "foo!"; var array = ['a', 'b', 'c'];
for (var i in array) { alert(array[i]); } |
简单解释欢迎提建议:for i=0; i<length;i++ 循环 取到数组长度,到长度-1就不继续往下循环控制住,而for in 是在数组中找不到,会继续往原型链中找,知道原型链中没有值。
2.获取数组中最大值最小值:
var numReg = /^-?[0-9]+.?[0-9]*$/
Array.prototype.min = function() {
return this.reduce(function(preValue, curValue,index,array) {
if ( numReg.test(preValue) && numReg.test(curValue) ) {
return preValue > curValue ? curValue : preValue;
} else if ( numReg.test(preValue) ) {
return preValue;
} else if ( numReg.test(curValue) ) {
return curValue;
} else {
return 0;
}
})
}
Array.prototype.max = function() {
return this.reduce(function(preValue, curValue,index,array) {
if ( numReg.test(preValue) && numReg.test(curValue) ) {
return preValue < curValue ? curValue : preValue;
} else if ( numReg.test(preValue) ) {
return preValue;
} else if ( numReg.test(curValue) ) {
return curValue;
} else {
return 0;
}
})
}