微信搜索【GreatMovetotheWorld】,第一时间与大家分享前端行业动态、学习路径等。本文GitHubhttps://github.com/qq44924588...已收录,有完整的测试站点、资料和我的一线厂商访谈系列文章。最近有人问我,JavaScript对象属性就一定是无序不可预测的吗?早期接触过JavaScript的开发人员可能会回答说Object.keys()或for...in将返回不可预测的对象属性顺序。但是现在还是这样吗?不,有些情况下是订购的。从ECMAScript2020开始,Object.key、for...in、Object.getOwnPropertyNames和Reflect.ownKeys都遵循相同的规范顺序。它们是:1.自身属性是数组的索引,按照数值索引升序排列constobj={100:100,'2':2,12:12,'0':0}//顺序下面打印的结果都是['0','2','12','100']console.log(Object.keys(obj))console.log(Object.getOwnPropertyNames(obj))console.log(Reflect.ownKeys(obj))for(constkeyinobj){console.log('key',key)}constobj={a:'a',};obj.b='b';setTimeout(()=>{obj.c='c';});obj.d='d';//下面打印结果的顺序是`['a','b','d']`console.log(Object.keys(obj));console.log(Object.getOwnPropertyNames(obj));console.log(Reflect.ownKeys(obj));for(constkeyinobj){console.log('key:',key);}以上代码增加了事件循环知识点。因为setTimeout是一个异步宏任务,所以在输出console.log的时候,obj还没有添加c属性。3.自身的Symbol属性,按创建时间顺序递增constobj={[Symbol('a')]:'a',[Symbol.for('b')]:'b',};obj[Symbol('c')]='c';console.log(Object.keys(obj));//[]console.log(Object.getOwnPropertyNames(obj));//[]console.log(Reflect.ownKeys(obj));//[Symbol(a),Symbol(b),Symbol(c)]for(constkeyinobj){console.log('key:',key);//无输出}console.log(Object.getOwnPropertySymbols(obj));//[Symbol(a),Symbol(b),Symbol(c)]Symbol属性和String属性一样,按照属性创建的时间顺序升序排列。但是Object.key,for...in,Object.getOwnPropertyNames方法不能获取对象的Symbol属性,而Reflect.ownKeys和Object.getOwnPropertySymbols可以。总结当一个对象的属性键是上述类型的组合时,对象的非负整数键(可枚举和不可枚举)首先按升序添加到数组中,然后按插入顺序添加字符串键。最后,按插入顺序添加符号键。constobj={100:100,0:0,a:'a',[Symbol('a')]:'a',};obj[Symbol.for('b')]='b';obj.b='b';console.log(Object.keys(obj));//['0','100','a','b']console.log(Object.getOwnPropertyNames(obj));//['0','100','a','b']控制台。日志(反射。ownKeys(obj));//['0','100','a','b',Symbol(a),Symbol(b)]for(constkeyinobj){console.log('key:',key);//'0''100''a''b'}console.log(Object.getOwnPropertySymbols(obj));//[Symbol(a),Symbol(b)]但是,如果你强烈依赖插入顺序,那么Map可以保证这一点。编辑过程中可能存在的BUG无法实时获知。之后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的BUG监控工具Fundebug。作者:islizeqiang译者:小智来源:medium原文:https://medium.com/@islizeqia...交流有梦想,有干货,微信搜索【大千世界】关注这个早还在洗碗的刷子早上碗智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。
