JavaScript1.6新特性系列之 forEach?
?
总结:数组中的每一项多按照指定的方法执行。
?
Method of?
Array
Implemented in
JavaScript 1.6
ECMAScript Edition
ECMAScript 5th Edition
?
?
语法:
?
?
array.forEach(callback[,thisArg]);
?
参数:
?
- callback ?---每一项指定的执行方法
- thisArg ? ---当callback方法执行时候的this对象
通用性:
?? ? forEach 是加入ECMA-262标准里面的,可能在别的标准里面没有它。下面的代码你可以放在你的脚本前面,它可以支持你使用forEach.
- if?(?!Array.prototype.forEach?)?{??
- ??
- ??Array.prototype.forEach?=?function(?callback,?thisArg?)?{??
- ??
- ????var?T,?k;??
- ??
- ????if?(?this?==?null?)?{??
- ??????throw?new?TypeError(?"?this?is?null?or?not?defined"?);??
- ????}??
- ??
- ????//?1.?Let?O?be?the?result?of?calling?ToObject?passing?the?|this|?value?as?the?argument.??
- ????var?O?=?Object(this);??
- ??
- ????//?2.?Let?lenValue?be?the?result?of?calling?the?Get?internal?method?of?O?with?the?argument?"length".??
- ????//?3.?Let?len?be?ToUint32(lenValue).??
- ????var?len?=?O.length?>>>?0;?//?Hack?to?convert?O.length?to?a?UInt32??
- ??
- ????//?4.?If?IsCallable(callback)?is?false,?throw?a?TypeError?exception.??
- ????//?See:?http://es5.github.com/#x9.11??
- ????if?(?{}.toString.call(callback)?!=?"[object?Function]"?)?{??
- ??????throw?new?TypeError(?callback?+?"?is?not?a?function"?);??
- ????}??
- ??
- ????//?5.?If?thisArg?was?supplied,?let?T?be?thisArg;?else?let?T?be?undefined.??
- ????if?(?thisArg?)?{??
- ??????T?=?thisArg;??
- ????}??
- ??
- ????//?6.?Let?k?be?0??
- ????k?=?0;??
- ??
- ????//?7.?Repeat,?while?k?<?len??
- ????while(?k?<?len?)?{??
- ??
- ??????var?kValue;??
- ??
- ??????//?a.?Let?Pk?be?ToString(k).??
- ??????//???This?is?implicit?for?LHS?operands?of?the?in?operator??
- ??????//?b.?Let?kPresent?be?the?result?of?calling?the?HasProperty?internal?method?of?O?with?argument?Pk.??
- ??????//???This?step?can?be?combined?with?c??
- ??????//?c.?If?kPresent?is?true,?then??
- ??????if?(?k?in?O?)?{??
- ??
- ????????//?i.?Let?kValue?be?the?result?of?calling?the?Get?internal?method?of?O?with?argument?Pk.??
- ????????kValue?=?O[?k?];??
- ??
- ????????//?ii.?Call?the?Call?internal?method?of?callback?with?T?as?the?this?value?and??
- ????????//?argument?list?containing?kValue,?k,?and?O.??
- ????????callback.call(?T,?kValue,?k,?O?);??
- ??????}??
- ??????//?d.?Increase?k?by?1.??
- ??????k++;??
- ????}??
- ????//?8.?return?undefined??
- ??};??
- } ?
?
?
?
举例:
[10,20,30,40].forEach(function(elem,index){ console.log('index='+index+"&elem="+elem); }); //输出 index=0&elem=10 index=1&elem=20 index=2&elem=30 index=3&elem=40?
浏览器兼容性
?