十一、遍历对象,遍历数组

2019-01-24  本文已影响0人  懒羊羊3号

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)) { }
image.png

对象的方法

一、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有用,跳出函数

上一篇下一篇

猜你喜欢

热点阅读