摘要:解決方案用一個(gè)臨時(shí)變量存儲(chǔ)結(jié)果,當(dāng)條件成立相同時(shí)將結(jié)果改為這樣雖然能獲得正確的返回值,但卻無法阻止的循環(huán)想來應(yīng)該是用在歷遍數(shù)組元素來做一些操作,像這樣的應(yīng)該用循環(huán)比較好一些
在寫一個(gè)比較數(shù)組對(duì)象中是否存在一個(gè)對(duì)象,存在返回true,失敗返回false.在return時(shí),發(fā)現(xiàn)并沒有退出方法,自己測試了一下.
首先先寫一個(gè)數(shù)組對(duì)象,然后用angularjs的forEach方法循環(huán)比較,當(dāng)存在名字為2的對(duì)象時(shí),輸出true并返回,否則輸出false并返回.
self.test = function() { var testArray = [{name: 1},{name:2},{name:3}]; angular.forEach(testArray, function(value, key){ if (value.name == 2) {console.log(true + " pass the test");return;} console.log(value.name + " pass"); }); console.log(false + " pass the test"); return false; }();
剛開始認(rèn)為,當(dāng)找到value.name == 2的元素時(shí),方法就會(huì)直接返回,所以應(yīng)該只輸出1 pass,true pass the test然后程序結(jié)束,但輸出結(jié)果卻是這樣的:
結(jié)果發(fā)現(xiàn)在forEach里的return 居然只起到了for循環(huán)里的continue作用.
再把forEach循環(huán)的返回值和執(zhí)行函數(shù)的返回值打印出來:
forEach函數(shù)返回的是循環(huán)的數(shù)組,函數(shù)的返回值是false.說明在forEach里return 并沒有奏效,僅僅起到了continue的作用.
去網(wǎng)上搜了一下,并沒有原因說明..
經(jīng)老師指導(dǎo),找到了原因。在當(dāng)初c和c++的學(xué)習(xí)時(shí),我們總是習(xí)慣認(rèn)為只要return就會(huì)跳出我們所定義的函數(shù),確實(shí)return確實(shí)有退出函數(shù)的作用,然而在js中并不是return沒有起到效果,他也確實(shí)起到了效果:
起初我們認(rèn)為return后會(huì)跳出這個(gè)方法:
實(shí)則不然,他跳出的其實(shí)這個(gè)方法:
到這我們就明白了,return確實(shí)起到了返回方法的作用,但他返回的不是我們理想的方法。而是我們定義的匿名函數(shù),在匿名函數(shù)返回后,angular.foreach()函數(shù)又開始下一次的遍歷,于是就沒有能達(dá)到我們想要的效果。
解決方案:用一個(gè)臨時(shí)變量存儲(chǔ)結(jié)果,當(dāng)條件成立相同時(shí)將結(jié)果改為true:
self.test = function() { var testArray = [{name: 1},{name:2},{name:3}]; var result = false; angular.forEach(testArray, function(value, key){ if (value.name == 2) {result = true;} }); return result; }; console.log(self.test());
png](/img/bVbhHi8)
這樣雖然能獲得正確的返回值,但卻無法阻止angular.forEach的循環(huán),想來forEach應(yīng)該是用在歷遍數(shù)組元素來做一些操作,像這樣的應(yīng)該用for循環(huán)比較好一些.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98114.html
摘要:最近在公司使用用完成了一個(gè)項(xiàng)目,在此記錄一下過程中遇到的問題及解決方案。其他兩種方法可參考站內(nèi)文章控制器如何通信結(jié)語以上為我在編寫一個(gè)應(yīng)用時(shí)遇到的問題及解決方案,記錄并分享出來,歡迎大家指正 最近在公司使用用AngularJS(1.3.9)完成了一個(gè)項(xiàng)目,在此記錄一下過程中遇到的問題及解決方案。 使用$http服務(wù)發(fā)送ajax請(qǐng)求時(shí)后端無法判斷請(qǐng)求是XMLHttpRequest 問題...
摘要:關(guān)鍵字為跳出方法或返回值??偨Y(jié)如下接收變量方法名實(shí)參列表沒有返回值,不能使用接收變量。四重載一般來說,功能點(diǎn)相同的方法才適合使用重載,重載必須滿足如下要求必須是同一個(gè)類方法名必須相同參數(shù)列表不同注意方法重載與返回值無關(guān)。 一、概述 方法是指人們?cè)趯?shí)踐過程中為達(dá)到一定目的和效果所采取的辦法、手段和解決方案。 所謂方法,就是解決一類問題的代碼的有序組合,是一個(gè)功能模塊。編程語言中的方法是組...
摘要:比如就是一種,它可以用來管理狀態(tài)返回的結(jié)果是數(shù)組,數(shù)組的第一項(xiàng)是值,第二項(xiàng)是賦值函數(shù),函數(shù)的第一個(gè)參數(shù)就是默認(rèn)值,也支持回調(diào)函數(shù)。而之所以輸出還是正確的,原因是的回調(diào)函數(shù)中,值永遠(yuǎn)指向最新的值,因此沒有邏輯漏洞。 1. 引言 如果你在使用 React 16,可以嘗試 Function Component 風(fēng)格,享受更大的靈活性。但在嘗試之前,最好先閱讀本文,對(duì) Function Com...
摘要:幸運(yùn)的是,使用符號(hào)創(chuàng)建的構(gòu)造器,如果在不使用來調(diào)用,則始終會(huì)報(bào)錯(cuò),即使在非嚴(yán)格模式下也不會(huì)產(chǎn)生問題。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Bugs and Errors 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2 版)》 調(diào)試的難度是開始編寫代碼的兩倍。 因此,如...
摘要:當(dāng)組件安裝和更新時(shí),回調(diào)函數(shù)都會(huì)被調(diào)用。好在為我們提供了第二個(gè)參數(shù),如果第二個(gè)參數(shù)傳入一個(gè)數(shù)組,僅當(dāng)重新渲染時(shí)數(shù)組中的值發(fā)生改變時(shí),中的回調(diào)函數(shù)才會(huì)執(zhí)行。 前言 首先歡迎大家關(guān)注我的Github博客,也算是對(duì)我的一點(diǎn)鼓勵(lì),畢竟寫東西沒法獲得變現(xiàn),能堅(jiān)持下去也是靠的是自己的熱情和大家的鼓勵(lì),希望大家多多關(guān)注呀!React 16.8中新增了Hooks特性,并且在React官方文檔中新增...
閱讀 1781·2021-11-24 10:18
閱讀 2296·2021-11-18 13:20
閱讀 2391·2021-08-23 09:46
閱讀 1065·2019-08-30 15:56
閱讀 2890·2019-08-30 15:53
閱讀 805·2019-08-30 14:22
閱讀 529·2019-08-29 15:34
閱讀 2580·2019-08-29 12:14