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
浏览器兼容性