1桅打、ES6的for..of遍歷焕参,不能遍歷對象
Array.prototype[Symbol.iterator];
// ? values() { [native code] }
String.prototype[Symbol.iterator];
// ? [Symbol.iterator]() { [native code] }
Set.prototype[Symbol.iterator];
// ? values() { [native code] }
Map.prototype[Symbol.iterator];
// ? entries() { [native code] }
Object.prototype[Symbol.iterator];
// undefined
//給對象添加遍歷器
Object.prototype[Symbol.iterator] = function() {
let _this = this
let index = 0
let length = Object.keys(_this).length
return {
next:() => {
let value = _this[index]
let done = (index >= length)
index++
return {value,done}
}
}
}
2、遍歷對象
//循環(huán)遍歷對象自身的和繼承的可枚舉屬性(不含Symbol屬性).
for (const key in obj) { }
// 返回一個(gè)數(shù)組,包括對象自身的(不含繼承的)所有可枚舉屬性(不含Symbol屬性)
Object.keys(obj).forEach(() => {})
//返回一個(gè)數(shù)組,包含對象自身的所有屬性(不含Symbol屬性,但是包括不可枚舉屬性)
Object.getOwnPropertyNames(obj)
//返回一個(gè)數(shù)組,包含對象自身的所有屬性,不管屬性名是Symbol或字符串,也不管是否可枚舉.
Reflect.ownKeys(obj)
for (const [key, values] of Object.entries(obj)) { }
對象的方法
一油额、Object.assign
var o1 = { a: 1, b: 1, c: 1 };
var o2 = { b: 2, c: 2 };
var o3 = { c: 3 };
var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
//object1沒有變化
const object2 = Object.assign({c: 4, d: 5}, object1);
循環(huán)
一、forEach
break沒有用
return false 只會(huì)跳出當(dāng)前循環(huán)刻帚,不執(zhí)行當(dāng)前循環(huán)下面的語句
var array = ["first","second","third","fourth"];
// 會(huì)遍歷數(shù)組所有元素潦嘶,只是執(zhí)行到第3次師,return false下面的代碼不再執(zhí)行而已
array.forEach(function(item,index){
if (item == "first") {
return false;
}
console.log(item);// first,second
});
二崇众、for
break有用掂僵,跳出循環(huán)
return有用航厚,跳出函數(shù)