for(循環起始條件;循環終止條件;每次循環累加的條件){ 循環體代碼 };javascript
var i = 0;
=>全局變量,能夠省略(在全局下已經設置初始值的狀況下)let i = 0;
=> let造成塊級做用域,i即爲塊級做用域中的私有變量let ary = [10,20,30]
for (var i = 0; i < ary.length; i++) {
console.log(ary[i]); //10 20 30
console.log(typeof i); //number
};
複製代碼
for循環中的兩個關鍵詞(進行流程控制):break continuejava
break:
強制結束整個循環,後面的代碼再也不執行,循環結束continue:
結束本輪循環,contiune後面的代碼再也不執行,繼續執行下一輪循環num = 0;
for (var i = 0; i < 10; i++) {
if (i < 5) {
num++;
continue;
};
if (i === 5) {
num--;
break;
};
num *= 2;
};
console.log(num); //4
複製代碼
__pproto__
)if(obj.hasOwnProperty(key){ //通常使用for in遍歷對象時,咱們加一個私有屬性的驗證,只有是私有的屬性,才繼續操做
console.log(key)
}
複製代碼
//循環遍歷一個對象
let obj = { name: 'Tom', age: 23, id: 6 };
for (let keys in obj) {
console.log(keys); // name age id
console.log(obj[keys]); // Tom 23 6;
console.log(typeof keys); //string
};
複製代碼
//循環遍歷一個數組
let ary = [10, 20, 30];
for (let keys in ary) {
console.log(keys); // name age id
console.log(ary[keys]); // Tom 23 6;
console.log(typeof keys); // string
};
複製代碼
let obj = {
zdy: 'Tom', //私有屬性
id:13, //私有屬性
};
Object.prototype.say = function(){ //公有屬性,即原型上的屬性方法
console.log(1);
};
for(let attr in obj){
// 若是attr是obj的私有屬性爲true,就執行
if(obj.hasOwnProperty(attr)){
console.log(obj[attr])
}
}
複製代碼
for循環和for in循環的區別:數組
- for循環一般用來循環數組,循環出索引i都是number數據類型
- for in循環一般用來循環一個對象的可枚舉屬性 2.1 當for in循環數組時,循環出索引i是string類型,不能直接使用,同時會下降代碼執行效率
若是想要在forEach循環中跳出循環,可使用try catch語句 try...catch 能夠測試代碼中的錯誤。try 部分包含須要運行的代碼,而 catch 部分包含錯誤發生時運行的代碼。瀏覽器
let arr = [true, 'haha', 10, {}, [1, 2, 3]];
arr.forEach(function (item, i, all) {
// console.log(item);//數組中的每項
// console.log(i); //索引
// console.log(all); // 整個數組
console.log(this); //第二個參數若是沒有,則this是window
}, arr);
複製代碼
try {
var array = ["first", "second", "third", "fourth"];
array.forEach(function (item, index) {
if (item == "third") {
var a = aaaa; // first second 後就報錯,就跳出循環了
throw new Error("ending");//報錯,就跳出循環
} else {
console.log(item);
};
});
} catch (e) {
if (e.message == "ending") {
console.log("結束了");
} else {
console.log(e.message);
};
};
複製代碼
map循環:數組內置遍歷方法,它的返回值爲新的數組函數
var ary = [1, 2, 3, 4, 5];
var a2 = ary.map(function (item, index, ary) {
// item 當前這一項
// index 當前項的索引
// ary原數組 ary === a
return item * 2; //每次指定的返回值被做爲新數組中的內容
});
console.log(a2);//[2,4,6,8,10]
複製代碼
for of循環:Es6 中新增的語句 for…of循環可使用的範圍包括數組、Set 和 Map 結構、某些相似數組的對象(好比arguments對象、DOM NodeList 對象)、Generator 對象,以及字符串)測試
// 循環數組
let arr = [true, 'haha', 10, {}, [1, 2, 3]];
for(let item of arr){
if(typeof item === 'number'){
console.log(item); //10
continue;
};
if(typeof item === 'object'){
console.log(item); //{}
break;
};
console.log(item); // true haha
};
複製代碼
// 循環字符串
let str = 'hello';
for(let item of str){
console.log(item); // h e l l o
};
複製代碼
// 循環類數組
function fn() {
for (let item of arguments) {
console.log(item); //寶石眼 貓肚子 貓尾巴
};
};
fn('寶石眼', '貓肚子', '貓尾巴');
複製代碼
// for of不能直接遍歷對象 ,可使用Object.keys()
// Object.keys()能夠將對象裏的因此的屬性名取出來放到一個數組中
let obj = { name: 'Tom', age: 33, id: 6 };
for (let item of Object.keys(obj)) {
console.log(item + ':' + obj[item]); // name:Tom age:33 id:6
};
複製代碼
while(循環條件){ // 只要條件爲true 就一直循環下去 };ui
var n = 0;
while (n < 5) {
console.log(n);// 只要條件爲true 就一直循環下去
n++;
};
複製代碼
// 遍歷數組
let ary = ['a', 'b', 'c', 'd'];
let i = 0;
while (ary[i]) {
console.log(ary[i]);
i++;
};
複製代碼
do/while 循環是 while 循環的變體。該循環會執行一次代碼塊,在檢查條件是否爲真以前,而後若是條件爲真的話,就會重複這個循環。this
let ary = ['a', 'b', 'c', 'd'];
let i = 0;
do {
console.log(ary[i]);
i++;
}
while(ary[i]);
複製代碼
//過濾大於10小於30的數字
let arr = [3, 10, 18, 38, 48, 26];
let ary = arr.filter(function (item, i) {
return item >= 10 && item < 30
})
console.log(ary);
複製代碼
let arr = [1, 2, 3, 4, 5];
//查看數組中是否有6,明顯沒有,就返回false
let res = arr.some(function (item) {
return item === 6
});
console.log(res); // flase(數組中沒有6)
let res1 = arr.indexOf(6);
console.log(res1); //-1(數組中沒有6)
複製代碼
let arr = ['62',[],NaN,{},(function(){})(),/^$/,2333];
let arr1 = [1,2,3,4,5,6];
let res = arr.every(function(item,i){
return item;
});
let res1 = arr1.every(function(item,i){
return item;
});
console.log(res); //false (不是全部項都爲true)
console.log(res1); //true (全部項都爲true)
複製代碼
Object.keys()
遍歷對象 返回一個包括對象屬性名的數組 (可枚舉的屬性名)Object.getOwnPropertyNames()
let obj = { name: 'Tom', age: 33, id: 6 };
console.log(Object.keys(obj)); // ["name", "age", "id"]
console.log(Object.getOwnPropertyNames(obj)); // ["name", "age", "id"]
複製代碼