ÔÚECMAScript5£¨¼ò³Æ ES5£©ÖУ¬ÓÐÈýÖÖ for Ñ»·£¬·Ö±ðÊÇ£º
¼òµ¥forÑ»·
for-in
forEach
ÔÚ2015Äê6Ô·ݷ¢²¼µÄECMAScript6£¨¼ò³Æ ES6£©ÖУ¬ÐÂÔöÁËÒ»ÖÖÑ»·£¬ÊÇ£º
for-of
ÏÂÃæÎÒÃǾÍÀ´¿´¿´Õâ 4 ÖÖ for Ñ»·¡£

¼òµ¥ for Ñ»·
ÏÂÃæÏÈÀ´¿´¿´´ó¼Ò×î³£¼ûµÄÒ»ÖÖд·¨£º
const arr = [1, 2, 3]; for(let i = 0; i¡¡< arr.length; i++) { console.log(arr[i]); } |
µ±Êý×鳤¶ÈÔÚÑ»·¹ý³ÌÖв»»á¸Ä±äʱ£¬ÎÒÃÇÓ¦½«Êý×鳤¶ÈÓñäÁ¿´æ´¢ÆðÀ´£¬ÕâÑù»á»ñµÃ¸üºÃµÄЧÂÊ£¬ÏÂÃæÊǸĽøµÄд·¨£º
const arr = [1, 2, 3]; for(let i = 0, len = arr.length; i < len; i++) { console.log(arr[i]); } |
for-in
ͨ³£Çé¿öÏ£¬ÎÒÃÇ¿ÉÒÔÓà for-in À´±éÀúÒ»±éÊý×éµÄÄÚÈÝ£¬´úÂëÈçÏ£º
const arr = [1, 2, 3]; let index; for(index in arr) { console.log("arr[" + index + "] = " + arr[index]); } |
Ò»°ãÇé¿öÏ£¬ÔËÐнá¹ûÈçÏ£º
arr[0] = 1 arr[1] = 2 arr[2] = 3 |
µ«Õâô×öÍùÍù»á³öÏÖÎÊÌâ¡£
for-in µÄÕæÏà
for-in Ñ»·±éÀúµÄÊǶÔÏóµÄÊôÐÔ£¬¶ø²»ÊÇÊý×éµÄË÷Òý¡£Òò´Ë£¬ for-in ±éÀúµÄ¶ÔÏó±ã²»¾ÖÏÞÓÚÊý×飬»¹¿ÉÒÔ±éÀú¶ÔÏó¡£Àý×ÓÈçÏ£º
const person = { fname: "san", lname: "zhang", age: 99 }; let info; for(info in person) { console.log("person[" + info + "] = " + person[info]); } |
½á¹ûÈçÏ£º
person[fname] = san person[lname] = zhang person[age] = 99 |
ÐèҪעÒâµÄÊÇ£¬ for-in ±éÀúÊôÐÔµÄ˳Ðò²¢²»È·¶¨£¬¼´Êä³öµÄ½á¹û˳ÐòÓëÊôÐÔÔÚ¶ÔÏóÖеÄ˳ÐòÎ޹أ¬Ò²ÓëÊôÐÔµÄ×Öĸ˳ÐòÎ޹أ¬ÓëÆäËûÈκÎ˳ÐòÒ²Î޹ء£
Array µÄÕæÏà
Array ÔÚ Javascript ÖÐÊÇÒ»¸ö¶ÔÏó£¬ Array µÄË÷ÒýÊÇÊôÐÔÃû¡£ÊÂʵÉÏ£¬ Javascript
ÖÐµÄ ¡°array¡± ÓÐЩÎóµ¼ÐÔ£¬ Javascript ÖÐµÄ Array ²¢²»Ïñ´ó²¿·ÖÆäËûÓïÑÔµÄÊý×é¡£Ê×ÏÈ£¬
Javascript ÖÐµÄ Array ÔÚÄÚ´æÉϲ¢²»Á¬Ðø£¬Æä´Î£¬ Array µÄË÷Òý²¢²»ÊÇÖ¸Æ«ÒÆÁ¿¡£Êµ¼ÊÉÏ£¬
Array µÄË÷ÒýÒ²²»ÊÇ Number ÀàÐÍ£¬¶øÊÇ String ÀàÐ͵ġ£ÎÒÃÇ¿ÉÒÔÕýȷʹÓÃÈç arr[0]
µÄд·¨µÄÔÒòÊÇÓïÑÔ¿ÉÒÔ×Ô¶¯½« Number ÀàÐ굀 0 ת»»³É String ÀàÐ굀 "0"
¡£ËùÒÔ£¬ÔÚ Javascript ÖдÓÀ´¾ÍûÓÐ Array µÄË÷Òý£¬¶øÖ»ÓÐÀàËÆ "0"
¡¢ "1" µÈµÈµÄÊôÐÔ¡£ÓÐȤµÄÊÇ£¬Ã¿¸ö Array ¶ÔÏó¶¼ÓÐÒ»¸ö length µÄÊôÐÔ£¬µ¼ÖÂÆä±íÏֵظüÏñÆäËûÓïÑÔµÄÊý×é¡£µ«ÎªÊ²Ã´ÔÚ±éÀú
Array ¶ÔÏóµÄʱºòûÓÐÊä³ö length ÕâÒ»ÌõÊôÐÔÄØ£¿ÄÇÊÇÒòΪ for-in Ö»ÄܱéÀú¡°¿Éö¾ÙµÄÊôÐÔ¡±£¬
length ÊôÓÚ²»¿Éö¾ÙÊôÐÔ£¬Êµ¼ÊÉÏ£¬ Array ¶ÔÏó»¹ÓÐÐí¶àÆäËû²»¿Éö¾ÙµÄÊôÐÔ¡£
ÏÖÔÚ£¬ÎÒÃÇÔٻعýÍ·À´¿´¿´Óà for-in À´Ñ»·Êý×éµÄÀý×Ó,ÎÒÃÇÐÞ¸ÄÒ»ÏÂÇ°Ãæ±éÀúÊý×éµÄÀý×Ó£º
const arr = [1, 2, 3]; arr.name = "Hello world"; let index; for(index in arr) { console.log("arr[" + index + "] = " + arr[index]); } |
ÔËÐнá¹ûÊÇ£º
arr[0] = 1 arr[1] = 2 arr[2] = 3 arr[name] = Hello world |
ÎÒÃÇ¿´µ½ for-in Ñ»··ÃÎÊÁËÎÒÃÇÐÂÔöµÄ "name" ÊôÐÔ£¬ÒòΪ for-in
±éÀúÁ˶ÔÏóµÄËùÓÐÊôÐÔ£¬¶ø²»½ö½öÊÇ¡°Ë÷Òý¡±¡£Í¬Ê±ÐèҪעÒâµÄÊÇ£¬´Ë´¦Êä³öµÄË÷ÒýÖµ£¬¼´ "0"¡¢
"1"¡¢ "2"²»ÊÇ Number ÀàÐ͵쬶øÊÇ String
ÀàÐ͵ģ¬ÒòΪÆä¾ÍÊÇ×÷ΪÊôÐÔÊä³ö£¬¶ø²»ÊÇË÷Òý¡£ÄÇÊDz»ÊÇ˵²»ÔÚÎÒÃÇµÄ Array ¶ÔÏóÖÐÌí¼ÓеÄÊôÐÔ£¬ÎÒÃǾͿÉÒÔÖ»Êä³öÊý×éÖеÄÄÚÈÝÁËÄØ£¿´ð°¸ÊÇ·ñ¶¨µÄ¡£ÒòΪ
for-in ²»½ö½ö±éÀú array ×ÔÉíµÄÊôÐÔ£¬Æä»¹±éÀú array ÔÐÍÁ´ÉϵÄËùÓпÉö¾ÙµÄÊôÐÔ¡£ÏÂÃæÎÒÃÇ¿´¸öÀý×Ó£º
Array.prototype.fatherName = "Father"; const arr = [1, 2, 3]; arr.name = "Hello world"; let index; for(index in arr) { console.log("arr[" + index + "] = " + arr[index]); } |
ÔËÐнá¹ûÊÇ£º
arr[0] = 1 arr[1] = 2 arr[2] = 3 arr[name] = Hello world arr[fatherName] = Father |
дµ½ÕâÀÎÒÃÇ¿ÉÒÔ·¢ÏÖ for-in ²¢²»ÊʺÏÓÃÀ´±éÀú Array ÖеÄÔªËØ£¬Æä¸üÊʺϱéÀú¶ÔÏóÖеÄÊôÐÔ£¬ÕâÒ²ÊÇÆä±»´´Ôì³öÀ´µÄ³õÖÔ¡£È´ÓÐÒ»ÖÖÇé¿öÀýÍ⣬¾ÍÊÇÏ¡ÊèÊý×é¡£¿¼ÂÇÏÂÃæµÄÀý×Ó£º
let key; const arr = []; arr[0] = "a"; arr[100] = "b"; arr[10000] = "c"; for(key in arr) { if(arr.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294 ) { console.log(arr[key]); } } |
for-in Ö»»á±éÀú´æÔÚµÄʵÌ壬ÉÏÃæµÄÀý×ÓÖУ¬ for-in ±éÀúÁË3´Î£¨±éÀúÊôÐÔ·Ö±ðΪ"0"¡¢
"100"¡¢ "10000"µÄÔªËØ£¬ÆÕͨ for Ñ»·Ôò»á±éÀú
10001 ´Î£©¡£ËùÒÔ£¬Ö»Òª´¦ÀíµÃµ±£¬ for-in ÔÚ±éÀú Array ÖÐÔªËØÒ²ÄÜ·¢»Ó¾Þ´ó×÷Óá£
ΪÁ˱ÜÃâÖØ¸´ÀͶ¯£¬ÎÒÃÇ¿ÉÒÔ°ü×°Ò»ÏÂÉÏÃæµÄ´úÂ룺
function arrayHasOwnIndex(array, prop) { return array.hasOwnProperty(prop) && /^0$|^[1-9]\d*$/.test(prop) && prop <= 4294967294; // 2^32 - 2 } |
ʹÓÃʾÀýÈçÏ£º
for (let key in arr) { if (arrayHasOwnIndex(arr, key)) { console.log(arr[key]); } } |
for-in ÐÔÄÜ
ÕýÈçÉÏÃæËù˵£¬Ã¿´Îµü´ú²Ù×÷»áͬʱËÑË÷ʵÀý»òÕßÔÐÍÊôÐÔ£¬ for-in Ñ»·µÄÿ´Îµü´ú¶¼»á²úÉú¸ü¶à¿ªÏú£¬Òò´ËÒª±ÈÆäËûÑ»·ÀàÐÍÂý£¬Ò»°ãËÙ¶ÈΪÆäËûÀàÐÍÑ»·µÄ
1/7¡£Òò´Ë£¬³ý·ÇÃ÷È·ÐèÒªµü´úÒ»¸öÊôÐÔÊýÁ¿Î´ÖªµÄ¶ÔÏ󣬷ñÔòÓ¦±ÜÃâʹÓà for-in Ñ»·¡£Èç¹ûÐèÒª±éÀúÒ»¸öÊýÁ¿ÓÐÏÞµÄÒÑÖªÊôÐÔÁÐ±í£¬Ê¹ÓÃÆäËûÑ»·»á¸ü¿ì£¬±ÈÈçÏÂÃæµÄÀý×Ó£º
const obj = { "prop1": "value1", "prop2": "value2" };
const props = ["prop1", "prop2"];
for(let i = 0; i < props.length; i++) {
console.log(obj[props[i]]);
} |
ÉÏÃæ´úÂëÖУ¬½«¶ÔÏóµÄÊôÐÔ¶¼´æÈëÒ»¸öÊý×éÖУ¬Ïà¶ÔÓÚ for-in ²éÕÒÿһ¸öÊôÐÔ£¬¸Ã´úÂëÖ»¹Ø×¢¸ø¶¨µÄÊôÐÔ£¬½ÚÊ¡ÁËÑ»·µÄ¿ªÏúºÍʱ¼ä¡£
forEach
ÔÚ ES5 ÖУ¬ÒýÈëÁËеÄÑ»·£¬¼´ forEach Ñ»·¡£
const arr = [1, 2, 3]; arr.forEach((data) => { console.log(data); }); |
ÔËÐнá¹û£º
forEach ·½·¨ÎªÊý×éÖк¬ÓÐÓÐЧֵµÄÿһÏîÖ´ÐÐÒ»´Î callback º¯Êý£¬ÄÇЩÒÑɾ³ý£¨Ê¹Óà delete ·½·¨µÈÇé¿ö£©»òÕß´Óδ¸³ÖµµÄÏ±»Ìø¹ý£¨²»°üÀ¨ÄÇЩֵΪ
undefined »ò null µÄÏ¡£ callback º¯Êý»á±»ÒÀ´Î´«ÈëÈý¸ö²ÎÊý£º
Êý×鵱ǰÏîµÄÖµ£»
Êý×鵱ǰÏîµÄË÷Òý£»
Êý×é¶ÔÏó±¾Éí£»
ÐèҪעÒâµÄÊÇ£¬forEach ±éÀúµÄ·¶Î§ÔÚµÚÒ»´Îµ÷Óà callback ǰ¾Í»áÈ·¶¨¡£µ÷ÓÃforEach
ºóÌí¼Óµ½Êý×éÖеÄÏî²»»á±» callback ·ÃÎʵ½¡£Èç¹ûÒѾ´æÔÚµÄÖµ±»¸Ä±ä£¬Ôò´«µÝ¸ø callback
µÄÖµÊÇ forEach ±éÀúµ½ËûÃÇÄÇÒ»¿ÌµÄÖµ¡£ÒÑɾ³ýµÄÏî²»»á±»±éÀúµ½¡£
const arr = []; arr[0] = "a"; arr[3] = "b"; arr[10] = "c"; arr.name = "Hello world"; arr.forEach((data, index, array) => { console.log(data, index, array); }); |
ÔËÐнá¹û£º
a 0 ["a", 3: "b", 10: "c", name: "Hello world"] b 3 ["a", 3: "b", 10: "c", name: "Hello world"] c 10 ["a", 3: "b", 10: "c", name: "Hello world"] |
ÕâÀïµÄ index ÊÇ Number ÀàÐÍ£¬²¢ÇÒÒ²²»»áÏñ for-in Ò»Ñù±éÀúÔÐÍÁ´ÉϵÄÊôÐÔ¡£
ËùÒÔ£¬Ê¹Óà forEach ʱ£¬ÎÒÃDz»ÐèҪרÃŵØÉùÃ÷ index ºÍ±éÀúµÄÔªËØ£¬ÒòΪÕâЩ¶¼×÷Ϊ»Øµ÷º¯ÊýµÄ²ÎÊý¡£
ÁíÍ⣬forEach ½«»á±éÀúÊý×éÖеÄËùÓÐÔªËØ£¬µ«ÊÇ ES5 ¶¨ÒåÁËһЩÆäËûÓÐÓõķ½·¨£¬ÏÂÃæÊÇÒ»²¿·Ö£º
every: Ñ»·ÔÚµÚÒ»´Î return false ºó·µ»Ø
some: Ñ»·ÔÚµÚÒ»´Î return true ºó·µ»Ø
filter: ·µ»ØÒ»¸öеÄÊý×飬¸ÃÊý×éÄÚµÄÔªËØÂú×ã»Øµ÷º¯Êý
map: ½«ÔÊý×éÖеÄÔªËØ´¦ÀíºóÔÙ·µ»Ø
reduce: ¶ÔÊý×éÖеÄÔªËØÒÀ´Î´¦Àí£¬½«Éϴδ¦Àí½á¹û×÷ΪÏ´δ¦ÀíµÄÊäÈ룬×îºóµÃµ½×îÖÕ½á¹û¡£
forEach ÐÔÄÜ
Ê×ÏȸÐл@papa paµÄÌáÐÑ£¬²Å·¢ÏÖÎÒ֮ǰµÄÀí½âÓдíÎó¡£
´ó¼Ò¿ÉÒÔ¿´ jsPerf £¬ÔÚ²»Í¬ä¯ÀÀÆ÷ϲâÊԵĽá¹û¶¼ÊÇ forEach µÄËٶȲ»Èç for¡£Èç¹û´ó¼Ò°Ñ²âÊÔ´úÂë·ÅÔÚ¿ØÖÆÌ¨µÄ»°£¬¿ÉÄÜ»áµÃµ½²»Ò»ÑùµÄ½á¹û£¬Ö÷ÒªÔÒòÊÇ¿ØÖÆÌ¨µÄÖ´Ðл·¾³ÓëÕæÊµµÄ´úÂëÖ´Ðл·¾³ÓÐËùÇø±ð¡£
for-of
ÏÈÀ´¿´¸öÀý×Ó£º
const arr = ['a', 'b', 'c']; for(let data of arr) { console.log(data); } |
ÔËÐнá¹ûÊÇ£º
ΪʲôҪÒý½ø for-of£¿
Òª»Ø´ðÕâ¸öÎÊÌ⣬ÎÒÃÇÏÈÀ´¿´¿´ES6֮ǰµÄ 3 ÖÖ for Ñ»·ÓÐʲôȱÏÝ£º
forEach ²»ÄÜ break ºÍ return£»
for-in ȱµã¸ü¼ÓÃ÷ÏÔ£¬Ëü²»½ö±éÀúÊý×éÖеÄÔªËØ£¬»¹»á±éÀú×Ô¶¨ÒåµÄÊôÐÔ£¬ÉõÖÁÔÐÍÁ´ÉϵÄÊôÐÔ¶¼±»·ÃÎʵ½¡£¶øÇÒ£¬±éÀúÊý×éÔªËØµÄ˳Ðò¿ÉÄÜÊÇËæ»úµÄ¡£
ËùÒÔ£¬¼øÓÚÒÔÉÏÖÖÖÖȱÏÝ£¬ÎÒÃÇÐèÒª¸Ä½øÔÏ鵀 for Ñ»·¡£µ« ES6 ²»»áÆÆ»µÄãÒѾдºÃµÄ JS ´úÂ롣Ŀǰ£¬³ÉǧÉÏÍòµÄ
Web ÍøÕ¾ÒÀÀµ for-in Ñ»·£¬ÆäÖÐÒ»Ð©ÍøÕ¾ÉõÖÁ½«ÆäÓÃÓÚÊý×é±éÀú¡£Èç¹ûÏëͨ¹ýÐÞÕý for-in Ñ»·Ôö¼ÓÊý×é±éÀúÖ§³Ö»áÈÃÕâÒ»ÇбäµÃ¸ü¼Ó»ìÂÒ£¬Òò´Ë£¬±ê׼ίԱ»áÔÚ
ES6 ÖÐÔö¼ÓÁËÒ»ÖÖеÄÑ»·Óï·¨À´½â¾öĿǰµÄÎÊÌ⣬¼´ for-of ¡£
ÄÇ for-of µ½µ×¿ÉÒÔ¸ÉÊ²Ã´ÄØ£¿
¸ú forEach Ïà±È£¬¿ÉÒÔÕýÈ·ÏìÓ¦ break, continue, return¡£
for-of Ñ»·²»½öÖ§³ÖÊý×飬»¹Ö§³Ö´ó¶àÊýÀàÊý×é¶ÔÏó£¬ÀýÈç DOM nodelist ¶ÔÏó¡£
for-of Ñ»·Ò²Ö§³Ö×Ö·û´®±éÀú£¬Ëü½«×Ö·û´®ÊÓΪһϵÁÐ Unicode ×Ö·ûÀ´½øÐбéÀú¡£
for-of Ò²Ö§³Ö Map ºÍ Set £¨Á½Õß¾ùΪ ES6 ÖÐÐÂÔöµÄÀàÐÍ£©¶ÔÏó±éÀú¡£
×ܽáһϣ¬for-of Ñ»·ÓÐÒÔϼ¸¸öÌØÕ÷£º
ÕâÊÇ×î¼ò½à¡¢×îÖ±½ÓµÄ±éÀúÊý×éÔªËØµÄÓï·¨¡£
Õâ¸ö·½·¨±Ü¿ªÁË for-in Ñ»·µÄËùÓÐȱÏÝ¡£
Óë forEach ²»Í¬µÄÊÇ£¬Ëü¿ÉÒÔÕýÈ·ÏìÓ¦ break¡¢continue ºÍ return Óï¾ä¡£
Æä²»½ö¿ÉÒÔ±éÀúÊý×飬»¹¿ÉÒÔ±éÀúÀàÊý×é¶ÔÏóºÍÆäËû¿Éµü´ú¶ÔÏó¡£
µ«ÐèҪעÒâµÄÊÇ£¬for-ofÑ»·²»Ö§³ÖÆÕͨ¶ÔÏ󣬵«Èç¹ûÄãÏëµü´úÒ»¸ö¶ÔÏóµÄÊôÐÔ£¬Äã¿ÉÒÔÓà for-in
Ñ»·£¨ÕâÒ²ÊÇËüµÄ±¾Ö°¹¤×÷£©¡£
×îºóҪ˵µÄÊÇ£¬ES6 Òý½øµÄÁíÒ»¸ö·½Ê½Ò²ÄÜʵÏÖ±éÀúÊý×éµÄÖµ£¬ÄǾÍÊÇ Iterator¡£ÉϸöÀý×Ó£º
const arr = ['a', 'b', 'c']; const iter = arr[Symbol.iterator]();
iter.next() // { value: 'a', done: false }
iter.next() // { value: 'b', done: false }
iter.next() // { value: 'c', done: false }
iter.next() // { value: undefined, done: true
} |
²»¹ý£¬Õâ¸öÄÚÈݳ¬³öÁ˱¾Îĵķ¶Î§£¬¶øÇÒ Iterator Òª½²µÄÒ²Óкܶ࣬ÒÔºóÓÐʱ¼äרÃÅдһƪÎÄÕ½éÉÜ£¬»¶Ó¹Ø×¢¡£
|