对象的遍历
有时候最简单最基础的东西,恰巧是最需要看的东西,从今天开始,开始每天回顾一些东西
先看对象的创建
let obj = {};
let createObj = Object.create({});
let createNull = Object.create(null);
据我了解可以这样创建对象,但是三种创建方式得出结果不同,前两种是拥有prototype(原型)的,可以寻找源头,第三种打印可知,是一个没有任何携带的空对象,no properties,无指针无原型
对象的判空
这个倒是经常使用的,对象为空的判断,数据使用要做兼容防止报错,此处延伸一个
try{}catch(){}
的问题,在代码中用此方法来防止代码报错显然是愚蠢的,在代码中过多try{}catch(){}
会造成程序的压力,影响不是很大但是一处处的不严谨就是造成代码质量过低的原因
//第一种判空方法
let obj = {};
let result = true;
for (let key in obj) {
result = false;
}
//第二种判空方法
let obj = {};
Object.keys(obj).length === 0
//第三种判空方法
let obj = {};
JSON.stringify(obj) === '{}'
对象的遍历
for...in
for(let key in B){
console.log(key, B[key]);
}
Object.keys()
let keys = Object.keys(B);
Object.getOwnPropertyNames()
与Object.keys功能一致,但Object.getOwnPropertyNames也可以传递数组,旨在返回由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)
let ownNames = Object.getOwnPropertyNames(B);
Object.getOwnPropertySymbols()
Reflect.ownKeys()
后两种不是十分常见,返回一个数组,包含给定对象所有自有的Symbol值的属性(包括不可枚举的Symbol值属性)
Object.keys()返回属性key,但不包括不可枚举的属性Reflect.ownKeys()返回所有属性key
说到这里想起了forEach,还有一个es6新增的for…fo
forEach
对数组的每一个元素执行一次提供的函数(不能使用return、break等中断循环),不改变原数组
for...fo
ES6中新增加的语法,用来循环获取一对键值对中的值,一个数据结构只有部署了 Symbol.iterator 属性, 具有 iterator接口可以使用 for of循环,obj对象没有Symbol.iterator属性 会报错
Symbol.iterator属性的对象有Array
Map
Set
String
arguments对象
dom列表
对象的遍历没什么花哨的东西,但是也是可以回顾一下的,比如es6新增的for...fo,如果不是回头看真的是没用过,Object.getOwnPropertySymbols() Reflect.ownKeys()也都只是了解,但是存在即合理,肯定自有其好处