91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中循環之間的技術差異是怎樣的

發布時間:2021-09-30 14:36:04 來源:億速云 閱讀:121 作者:柒染 欄目:web開發

本篇文章為大家展示了JavaScript中循環之間的技術差異是怎樣的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

在 JavaScript 中使用循環時,需要理解兩個關鍵點:可枚舉的屬性和可迭代的對象。

可枚舉的屬性

可枚舉對象的一個定義特征是,當通過賦值操作符向對象分配屬性時,我們將內部 enumerable 標志設置為true,這是默認值。

當然,我們可以通過將其設置為false來更改此行為。

要點:可枚舉的屬性都可以用for...in 遍歷出來。

舉個例子看看:

// 會出現在 for ... in 循環中 const gbols = {}; gbols.platform = "LogRocket";  Object.getOwnPropertyDescriptor(gbols, "platform");  // {value: "LogRocket", writable: true, enumerable: true, configurable: true}  for (const item in gbols) {    console.log(item) } // platform   // 不會出現在 for ... in 循環中 // 將 enumerable 設置為 false Object.defineProperty(gbols, 'role', {value: 'Admin', writable: true, enumerable: false})  for (const item in gbols) {   console.log(item) } // platform

可迭代的對象

如果一個對象定義了它的迭代行為,那么它就是可迭代的。在這種情況下,將在for  …of構造中循環的值將定義其迭代行為。可迭代的內置類型包括Arrays、Strings、Sets和Maps 。object  是不可迭代的,因為它沒有指定@iterator method。

在Javascript中,所有可迭代都是可枚舉的,但不是所有的可枚舉都是可迭代的。

for …in在數據中查找對象,而for ..of查找重復序列。來個例子看看:

const authors = ['小智', '小王', '小明', '小紅'];  // 與 for in 循環一起使用 fro (const author in authors) {   console.log(author) }  // 打印: 0,1,2,3  for (const author of authors) {   console.log(author) }  // 打印:小智  小王  小明   小紅

使用此構造時,需要牢記的是,如果調用了 typeof 得到的類型是 object,則可以使用for…in循環。

我們來看一下對authors變量的操作:

typeof authors  // 打印的是 “object”,因此我們可以使用`for ..in`

乍一看感覺有點奇怪,但必須注意,數組是一種特殊的對象,它以索引為鍵。for ...in循環找到對象時,它將循環遍歷每個鍵。

for …in 遍歷 authors 數組的方式可以用下面顯式化的方式來理解:

const authors = {   0: 'Jade',   1: 'Dafe',   2: 'Gbols',   3: 'Daniel' }

重要說明:如果可以追溯到對象(或從對象原型鏈繼承它),因為for …in將以不特定的順序遍歷鍵。

同時,如果實現 for.. of 構造的迭代器,則它將在每次迭代中循環遍歷該值。

ForEach 和 map 方法

盡管可以使用forEach和map方法來實現相同的目標,但是它們的行為和性能方面存在差異。

基礎層面上,當函數被調用時,它們都接收一個回調函數作為參數。

考慮下面的代碼片段:

const scoresEach = [2,4 ,8, 16, 32]; const scoresMap = [2,4 ,8, 16, 32]; const square = (num) => num * num;

我們逐一列出其操作上的一些差異。

forEach返回undefined,而map返回一個新數組:

let newScores = [] const resultWithEach = scoresEach.forEach((score) => { const newScore = square(score); newScores.push(newScore); }); const resultWithMap = scoresMap.map(square);  console.log(resultWithEach) // undefined console.log(resultWithMap) // [4, 16, 64, 256, 1024]

map是一個純函數,而forEach則執行一些更改:

console.log(newScores) // [4, 16, 64, 256, 1024]

在我看來,map傾向于函數式編程范例。與forEach不同的是,我們并不總是需要執行一次更改來獲得想要的結果,在forEach中,我們需要對newscore變量進行更改。在每次運行時,當提供相同的輸入時,map函數將產生相同的結果。同時,forEach對應項將從最后一次更改的前一個值中獲取數據。

鏈式

map可以使用鏈式操作,因為map返回的結果是一個數組。因此,可以立即對結果調用任何其他數組方法。換句話說,我們可以調用filter, reduce,  some等等。對于forEach,這是不可能的,因為返回的值是undefined。

性能

map 方法的性能往往優于forEach方法。

檢查用map和forEach實現的等效代碼塊的性能。平均而言,map函數的執行速度至少要快50%。

注意:此基準測試取決于你使用的計算機以及瀏覽器的實現。


在上面討論的所有循環結構中,為我們提供最多控制的是for..of的循環。我們可以將它與關鍵字return、continue和break一起使用。這意味著我們可以指定我們希望對數組中的每個元素發生什么,以及我們是想早點離開還是跳過。

上述內容就是JavaScript中循環之間的技術差異是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴安县| 邯郸县| 和平区| 株洲市| 内江市| 文登市| 稷山县| 定结县| 寿宁县| 兰坪| 新密市| 子长县| 五大连池市| 沁水县| 汨罗市| 皋兰县| 天门市| 来宾市| 津南区| 禄劝| 巍山| 周至县| 鄂温| 莎车县| 合水县| 南丹县| 舞阳县| 巴彦县| 台州市| 乐亭县| 什邡市| 临沂市| 洛隆县| 洛宁县| 泸水县| 青岛市| 高阳县| 荥阳市| 江口县| 晋中市| 航空|