电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JavaScript 各種遍歷方式詳解,有你不知道的黑科技

瀏覽:47日期:2023-11-19 13:14:46

為了方便例子講解,現(xiàn)有數(shù)組和json對(duì)象如下

var demoArr = [’Javascript’, ’Gulp’, ’CSS3’, ’Grunt’, ’jQuery’, ’angular’];var demoObj = { aaa: ’Javascript’, bbb: ’Gulp’, ccc: ’CSS3’, ddd: ’Grunt’, eee: ’jQuery’, fff: ’angular’};for

可以直接看示例,用得太多了,很簡(jiǎn)單

(function() { for(var i=0, len=demoArr.length; i<len; i++) {if (i == 2) { // return; // 函數(shù)執(zhí)行被終止 // break; // 循環(huán)被終止 continue; // 循環(huán)被跳過(guò)};console.log(’demo1Arr[’+ i +’]:’ + demo1Arr[i]); }})();

關(guān)于for循環(huán),有一下幾點(diǎn)需要注意

for循環(huán)中的i在循環(huán)結(jié)束之后任然存在與作用域中,為了避免影響作用域中的其他變量,使用函數(shù)自執(zhí)行的方式將其隔離起來(lái)()();

避免使用for(var i=0; i<demo1Arr.length; i++){} 的方式,這樣的數(shù)組長(zhǎng)度每次都被計(jì)算,效率低于上面的方式。也可以將變量聲明放在for的前面來(lái)執(zhí)行,提高閱讀性

var i = 0, len = demo1Arr.length;for(; i<len; i++) {};

跳出循環(huán)的方式有如下幾種

return 函數(shù)執(zhí)行被終止

break 循環(huán)被終止

continue 循環(huán)被跳過(guò)

完整實(shí)例

for in

for(var item in arr|obj){} 可以用于遍歷數(shù)組和對(duì)象

遍歷數(shù)組時(shí),item表示索引值, arr表示當(dāng)前索引值對(duì)應(yīng)的元素 arr[item]

遍歷對(duì)象時(shí),item表示key值,arr表示key值對(duì)應(yīng)的value值 obj[item]

(function() { for(var i in demoArr) {if (i == 2) { return; // 函數(shù)執(zhí)行被終止 // break; // 循環(huán)被終止 // continue; // 循環(huán)被跳過(guò)};console.log(’demoArr[’+ i +’]:’ + demoArr[i]); } console.log(’-------------’);})();

關(guān)于for in,有以下幾點(diǎn)需要注意:

在for循環(huán)與for in循環(huán)中,i值都會(huì)在循環(huán)結(jié)束之后保留下來(lái)。因此使用函數(shù)自執(zhí)行的方式避免。

使用return,break,continue跳出循環(huán)都與for循環(huán)一致,不過(guò)關(guān)于return需要注意,在函數(shù)體中,return表示函數(shù)執(zhí)行終止,就算是循環(huán)外面的代碼,也不再繼續(xù)往下執(zhí)行。而break僅僅只是終止循環(huán),后面的代碼會(huì)繼續(xù)執(zhí)行。

function res() { var demoArr = [’Javascript’, ’Gulp’, ’CSS3’, ’Grunt’, ’jQuery’, ’angular’]; for(var item in demoArr) {if (item == 2) { return;};console.log(item, demoArr[item]); } console.log(’desc’, ’function res’); //不會(huì)執(zhí)行}forEach

demoArr.forEach(function(arg) {})

參數(shù)arg表示數(shù)組每一項(xiàng)的元素,實(shí)例如下

demoArr.forEach(function(e) { if (e == ’CSS3’) {return; // 循環(huán)被跳過(guò)// break; // 報(bào)錯(cuò)// continue;// 報(bào)錯(cuò) }; console.log(e);})

具體有以下需要注意的地方

forEach無(wú)法遍歷對(duì)象

forEach無(wú)法在IE中使用,firefox和chrome實(shí)現(xiàn)了該方法

forEach無(wú)法使用break,continue跳出循環(huán),使用return時(shí),效果和在for循環(huán)中使用continue一致

do/while

函數(shù)具體的實(shí)現(xiàn)方式如下,不過(guò)有一點(diǎn)值得注意的是,當(dāng)使用continue時(shí),如果你將i++放在了后面,那么i++的值將一直不會(huì)改變,最后陷入死循環(huán)。因此使用do/while一定要小心謹(jǐn)慎一點(diǎn)。

不建議使用do/while的方式來(lái)遍歷數(shù)組

// 直接使用while(function() { var i = 0,len = demoArr.length; while(i < len) {if (i == 2) { // return; // 函數(shù)執(zhí)行被終止 // break; // 循環(huán)被終止 // continue; // 循環(huán)將被跳過(guò),因?yàn)楹筮叺拇a無(wú)法執(zhí)行,i的值沒(méi)有改變,因此循環(huán)會(huì)一直卡在這里,慎用??!};console.log(’demoArr[’+ i +’]:’ + demoArr[i]);i ++; } console.log(’------------------------’);})();// do while(function() { var i = 0,len = demo3Arr.length; do {if (i == 2) { break; // 循環(huán)被終止};console.log(’demo2Arr[’+ i +’]:’ + demo3Arr[i]);i++; } while(i<len);})();$.each

$.each(demoArr|demoObj, function(e, ele))

可以用來(lái)遍歷數(shù)組和對(duì)象,其中e表示索引值或者key值,ele表示value值

$.each(demoArr, function(e, ele) { console.log(e, ele);})

輸出為

0 'Javascript'1 'Gulp'2 'CSS3'3 'Grunt'4 'jQuery'5 'angular'

這里有很多需要注意的地方

使用return 或者return true為跳過(guò)一次循環(huán),繼續(xù)執(zhí)行后面的循環(huán)

使用return false為終止循環(huán)的執(zhí)行,但是并不終止函數(shù)執(zhí)行

無(wú)法使用break與continue來(lái)跳過(guò)循環(huán)

循環(huán)中this值輸出類(lèi)似如下

console.log(this);//String {0: 'C', 1: 'S', 2: 'S', 3: '3', length: 4, [[PrimitiveValue]]: 'CSS3'}console.log(this == ele);// true

關(guān)于上面的this值,遍歷一下

$.each(this, function(e, ele) { console.log(e, ele);})// 0 c// 1 s// 2 s// 4 3

為什么length 和 [[PrimitiveValue]]沒(méi)有遍歷出來(lái)?突然靈光一動(dòng),在《javascript高級(jí)編程》中找到了答案,大概意思就是javascript的內(nèi)部屬性中,將對(duì)象數(shù)據(jù)屬性中的Enumerable設(shè)置為了false

// 查看length的內(nèi)部屬性console.log(Object.getOwnPropertyDescriptor(this, ’length’));// Object {value: 4, writable: false, enumerable: false, configurable: false}

$.each 中的 $(this) 與this有所不同,不過(guò)遍歷結(jié)果卻是一樣,你可以在測(cè)試代碼中打印出來(lái)看看

$(selecter).each

專(zhuān)門(mén)用來(lái)遍歷DOMList

$(’.list li’).each(function(i, ele) { console.log(i, ele); // console.log(this == ele); // true $(this).html(i); if ($(this).attr(’data-item’) == ’do’) {$(this).html(’data-item: do’); };})

i: 序列值 ele: 只當(dāng)前被遍歷的DOM元素

this 當(dāng)前被遍歷的DOM元素,不能調(diào)用jQuery方法

$(this) == $(ele) 當(dāng)前被遍歷元素的jquery對(duì)象,可以調(diào)用jquery的方法進(jìn)行dom操作

使用for in 遍歷DOMList

因?yàn)閐omList并非數(shù)組,而是一個(gè)對(duì)象,只是因?yàn)槠鋕ey值為0,1,2... 而感覺(jué)與數(shù)組類(lèi)似,但是直接遍歷的結(jié)果如下

var domList = document.getElementsByClassName(’its’);for(var item in domList) { console.log(item, ’:’ + domList[item]);}// 0: <li></li>// 1: <li></li>// ...// length: 5// item: function item() {}// namedItem: function namedItem() {}

因此我們?cè)谑褂胒or in 遍歷domList時(shí),需要將domList轉(zhuǎn)換為數(shù)組

var res = [].slice.call(domList);for(var item in res) {}

類(lèi)似這樣的對(duì)象還有函數(shù)的屬性arguments對(duì)象,當(dāng)然字符串也是可以遍歷的,但是因?yàn)樽址渌麑傩缘膃numerable被設(shè)置成了false,因此遍歷出來(lái)的結(jié)果跟數(shù)組是一樣的,也就不用擔(dān)心這個(gè)問(wèn)題了.

小補(bǔ)充

如果你發(fā)現(xiàn)有些人寫(xiě)函數(shù)這樣搞,不要驚慌,也不要覺(jué)得他高大上鳥(niǎo)不起

+function(ROOT, Struct, undefined) { ... }(window, function() { function Person() {}})

()(), !function() {}() +function() {}() 三種函數(shù)自執(zhí)行的方式^_^

標(biāo)簽: JavaScript
主站蜘蛛池模板: 电动葫芦|手拉葫芦|环链电动葫芦|微型电动葫芦-北京市凌鹰起重机械有限公司 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 杭州火蝠电商_京东代运营_拼多多全托管代运营【天猫代运营】 | 耐火浇注料价格-高强高铝-刚玉碳化硅耐磨浇注料厂家【直销】 | 软膜天花_软膜灯箱_首选乐创品牌_一站式天花软膜材料供应商! | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | RFID电子标签厂家-上海尼太普电子有限公司 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | IP检测-检测您的IP质量| 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 高铝砖-高铝耐火球-高铝耐火砖生产厂家-价格【荣盛耐材】 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 拉力测试机|材料拉伸试验机|电子拉力机价格|万能试验机厂家|苏州皖仪实验仪器有限公司 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 加热制冷恒温循环器-加热制冷循环油浴-杭州庚雨仪器有限公司 | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」| 置顶式搅拌器-优莱博化学防爆冰箱-磁驱搅拌器-天津市布鲁克科技有限公司 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 紫外荧光硫分析仪-硫含量分析仪-红外光度测定仪-泰州美旭仪器 | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 流量卡中心-流量卡套餐查询系统_移动电信联通流量卡套餐大全 | 金库门,金库房,金库门厂家,金库门价格-河北特旺柜业有限公司 | 电缆接头_防水接头_电缆防水接头 - 乐清市新豪电气有限公司 | 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 |