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、遍历对象
//循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).
for (const key in obj) { }
// 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)
Object.keys(obj).forEach(() => {})
//返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)
Object.getOwnPropertyNames(obj)
//返回一个数组,包含对象自身的所有属性,不管属性名是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);
循环
一、forEach
break没有用
return false 只会跳出当前循环,不执行当前循环下面的语句
var array = ["first","second","third","fourth"];
// 会遍历数组所有元素,只是执行到第3次师,return false下面的代码不再执行而已
array.forEach(function(item,index){
if (item == "first") {
return false;
}
console.log(item);// first,second
});
二、for
break有用,跳出循环
return有用,跳出函数