1,循環
循環,就是根據某個條件,重復執行一段代碼
1.1,for循環
語法:
for (1 聲明循環變量; 2 判斷循環條件; 3 更新循環變量) { // 4 要執行的代碼塊 } // 執行順序 1 -> 2 -> 4 -> 3
例子:
for(let i = 0; i < 10; i++) { console.log(i) // 輸出 0 ~ 9 } // 或者 for(let i = 0; i < 10 && i != 5; i++) { console.log(i) // 輸出 0 ~ 4 } // 或者 for(let i = 0; i < 0 || i < 6; i++) { console.log(i) // 輸出 0 ~ 5 }
注意:
-
for
循環有三個表達式:1:聲明循環變量;2:判斷循環條件;3:更新循環變量。三個表達式之間,用;
符號分割,表達式都可以省略,但是兩個;
符號缺一 不可 -
for
循環是先判斷再執行,與while
循環相同 -
for
循環的三個表達式都可以有多部分組成,多個判斷條件用&&
或||
連接
for循環嵌套
例子:
// 99乘法表 for (let i = 1;i < 10; i++) { let arr = [] for (let k = 1;k < 10; k++) { arr.push(`${i}x${k}=${i * k}`) } console.log(arr) }
1.2,while循環
語法:
while (條件) { 要執行的代碼塊 }
例子:
let num = 0 while (num < 10){ console.log(num) num++ } // 輸出 0 ~ 9
注意:
while
循環會一直循環代碼塊,只要指定的條件為true
,所以不要忘記對條件中使用的變量進行遞增
1.3,do while循環
語法:
do { 要執行的代碼塊 } while (條件);
例子:
let i = 6 do { console.log(i) i++ } while (i < 5)
注意:
-
do while
循環是while
循環的變體。它會先執行一次代碼塊。之后再判斷條件,只要條件為真就會重復循環 -
該循環至少會執行一次,即使條件為
false
1.4,跳出循環
有時候需要跳過一次循環或者是終止整個循環
continue
跳過循環中的一個迭代
例子:
for (i = 0; i < 5; i++) { if (i === 3) { continue } console.log(i) } // 輸出 0 1 2 4
注意:
-
for
循環中,continue
之后執行的語句,是循環變量更新語句i++
-
while
和do while
循環中,continue
之后執行的語句,是循環條件判斷,必須將continue
放到i++
之后使用,否則continue
將跳過i++
進入死循環
break
跳出並終止整個循環
例子:
for (i = 0; i < 5; i++) { if (i === 2) { break } console.log(i) }
注意:
- 如果循環有多層,則
break
只能跳出一層
二,遍歷
遍歷,是指沿着某條搜索路線,依次對數據中每個節點均做一次訪問
2.1,for in
for...in
語句用於對數組或者對象的可枚舉屬性
進行循環操作,可用break
或者throw
跳出
語法:
// '變量'用來指定變量,指定的變量可以是數組元素,也可以是對象的屬性 for (變量 in 對象) { 在此執行代碼 }
例子:
let obj = { name: '張三', age: 18 } let arr = ['a', 'b', 'c'] for (let i in obj) { console.log(i) } // 輸出 name age for (let i in arr) { console.log(i) } // 輸出 0 1 2
2.2,for of
for...of
語句在可迭代對象
上創建一個迭代循環,調用自定義迭代鈎子,並為每個不同屬性的值執行語句(包括Array
,Map
,Set
,String
,TypedArray
,arguments
對象等等,不包括Object
),可用break
或者throw
跳出
語法:
for (variable of 可迭代對象) { // 操作語句 }
例子:
let arr = ['a', 'b', 'c'] let obj = { name: '張三', age: 18, sex: '男' } for (let i of arr) { console.log(i) } // 輸出 a b c for (let i of obj) { console.log(i) } // 報錯 obj is not iterable (obj不是可迭代的)
2.3,forEach
按升序為數組中含有效值的每一項執行一次給定的函數,那些已刪除或者未初始化的項將被跳過(比如[1,,2]
),如果需要中斷,請使用try/catch
配合throw
語法:
array.forEach(callback(currentValue, index, array))
例子:
let arr = ['a', 'b', 'c'] arr.forEach((item, index) => { console.log(`值:${item} 下標${index}`) }) // 輸出 值:a下標:0 值:b下標:1 值:c下標:2
終止循環:
try { arr.forEach((item, index) => { if (index === 1) { throw '終止' } console.log(`值:${item}下標:${index}`) }) } catch (error) { console.log(error) } // 輸出 值:a下標:0 終止
2.4,map
數組遍歷,返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值
語法:
array.map(function(currentValue,index,arr), thisValue)
例子:
let arr = [0, 1, 2, 3, 4, 5] let val = arr.map((item => { return item + 10 })) console.log(val) // 輸出 [10, 11, 12, 13, 14, 15]
2.5,filter
數組遍歷,返回一個新數組,其包含通過所提供函數實現的測試的所有元素
語法:
let newArray = arr.filter(callback(element, index, array), thisArg)
例子:
let arr = [0, 1, 2, 3, 4, 5] function fn(e) { return e - 2 > 1 } let arr2 = arr.filter(fn) console.log(arr2) // 輸出 [3, 4, 5]
2.6,keys()
對象遍歷,返回一個數組,其元素包括對象自身的(不含繼承的)所有可枚舉屬性(不含Symbol
屬性)的鍵名,不會返回原型上的方法
語法:
Object.keys(obj)
例子:
let obj = { name: '張三', age: 18, sex: '男' } console.log(Object.keys(obj)) // 輸出 ["name", "age", "sex"]
2.7,values()
對象遍歷,返回一個由目標對象value
組成的數組,其元素是在目標對象上找到的可枚舉屬性值
語法:
Object.values(obj)
例子:
let obj = { name: '張三', age: 18, sex: '男' } console.log(Object.keys(obj)) // 輸出 ["張三", 18, "男"]
如果看了覺得有幫助的,我是@鵬多多11997110103,歡迎 點贊 關注 評論;
END
作者:鵬多多11997110103
鏈接:https://www.jianshu.com/p/004f7521b812
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。