object.keys()
在實際開發中,我們有時需要知道物件的所有屬性,原生js給我們提供了乙個很好的方法:object.keys(),該方法返回乙個陣列,其中這個陣列的內容就是這個物件的所有鍵值
nodejs中foreach和普通迴圈區別
問題描述:
最近在寫**中發現在foreach迴圈中,使用await函式跟正常的迴圈有區別,所以進行記錄。
一般我們都將foreach叫做增強for迴圈,確實減少了部分**量,但是當內部使用await的時候需要注意,下面我寫了兩個例子。
1、如果在迴圈中不使用await這個promise,區別不大
2、foreach和普通迴圈中執行await函式情況
(1)foreach
[1,2,3].foreach(function hehe),先執行hehe(1),假如hehe裡面有非同步,就不會等它執行完,繼續執行hehe(2)了,所以有可能出現,整個函式執行完了,但是foreach裡面的函式還沒執行完
async functiontest(),1000)})
console.log(t);
})console.log('end');
}test();
列印出來的結果是:start end 1 2 3
(2)普通迴圈
async functiontest() , 1000) })
console.log(arr[index]);
} console.log('end');
}test();
列印結果為: start 1 2 3 end ,這才是我們需要的結果
for(let t of arr),這樣子是乙個promise完才進行下乙個,很多時候我們是需要這樣的
想:如果我們需要寫jest測試的時候,對於兩種情況,寫的測試**也應該是稍有區別的,普通迴圈的話我們只需要在測試的時候用await來寫,但是foreach因為在真正列印出來值之前已經結束了promise,那麼寫的時候是需要settimeout設定幾秒的。
3、foreach和普通迴圈中執行同步函式
**我就不貼上了,只需要把上面兩處的**中await new promise((resolve) => , 1000) })
注釋掉即可,測試發現,兩個迴圈最終結果都是:start 1 2 3 end
4、理論知識的區別:
(1)for迴圈是可以使用break和continue去終止迴圈的,但是foreach不行
(2)foreach**量少
(3)for多數時候都可以使用,當然一般需要知道迴圈次數,而foreach更適合集合物件的遍歷和操作
(4)注意內部使用await的情況
(5)只能對元素進行順序的訪問,只能訪問陣列或集合中的所有元素,迴圈中沒有當前索引
c 學習摘要
1.析構函式為什麼多為虛函式 基類的成員函式如果為虛函式,那麼其子類可以重新實現該函式,如果基類成員函式不為虛函式,那麼子類如果想擁有該方法需要過載。析構函式在物件銷毀時呼叫,用以銷毀物件內那些未被銷毀的變數。這就要求子類可以有自己的析構函式,來銷毀自己的需要銷毀的變數。2.什麼是純虛函式 基類本身...
C學習摘要
在 c 語言中,凡不加返回值型別限定的函式,就會被編譯器作為返回整型值處理。在多重迴圈中,如果有可能,應當將最長的迴圈放在最內層,最短的迴圈放在最外層,以減少 cpu 跨切迴圈層的次數。return 語句不可返回指向 棧記憶體 的 指標 因為該內存在函式體結束時被自動銷毀。大端模式 big endi...
GC Tuning Case學習摘要
case 1 場景 4cpu 2.6.18 xmx1536m xms1536m xmn500m 目標減少gc次數,以避免由於gc造成難以支撐高併發量 方法 降低響應時間或請求次數,這個需要重構,比較麻煩 減少舊生代記憶體的消耗,比較靠譜 減少每次請求的記憶體消耗,貌似比較靠譜 降低gc造成的應用暫停...