首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript对象存储顺序

Javascript对象存储顺序
EN

Stack Overflow用户
提问于 2020-08-09 15:08:30
回答 1查看 316关注 0票数 1

这是我的阵列

代码语言:javascript
复制
let setOne = [""];

现在,我创建了一个函数,该函数从数组(即setOne )获取元素,将该元素存储在一个对象中作为属性名,并给该属性名称一个true的值,并打印对象数据。

功能是

代码语言:javascript
复制
function checkTheSameBetter(setOne) {
  let ObjectShop = {};
  for (let indexSetOne = 0; indexSetOne < setOne.length; indexSetOne++) {
    ObjectShop[setOne[indexSetOne]] = true;
  }
  console.log(ObjectShop);
}

我得到的输出是

代码语言:javascript
复制
{ '': true }

到目前为止没有问题

下面是我在数组中添加另一个值的主要部分,即setOne,考虑"1“。

代码语言:javascript
复制
let setOne = ["",1];

然后当我执行函数checkTheSameBetter.时我得到输出

代码语言:javascript
复制
 {'1': true, '': true }

所以我的问题是,“这个'1‘是如何被存储在第一个位置的?” 我期望的输出是这样的。

代码语言:javascript
复制
{'': true, '1': true}

下面是沙箱链接https://codesandbox.io/s/cranky-cori-qx116?file=/src/index.js 有人能告诉我这里发生了什么吗?如果你需要澄清,我会给你的。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-09 15:27:45

ES6定义了枚举对象自身属性的顺序。以下是列举对象自身属性的规则:

  • 名称为非负数的字符串属性首先列出,从最小到最大.这意味着数组和类似数组的对象的属性将按顺序进行枚举。
  • 之后,所有具有字符串名称的属性都按照它们在对象中添加的顺序列出。这也包括看起来像非负数或浮点数的属性.
  • 最后,将名称为符号的属性按其在对象中添加的顺序列出。

下面的函数按上述顺序列出属性,但须受它们自身的约束。

  • Object.keys()
  • Object.getOwnPropertyNames()
  • Object.getOwnPropertySymbols()
  • Reflect.ownKeys()

需要记住的一点是,for in循环的枚举顺序并不像上面提到的枚举函数那样严格指定,但是它通常按照上面描述的顺序枚举自己的属性。

由于for in循环还枚举了prototype链中的属性,一旦枚举了自己的属性,它就会在prototype链上移动,按照上面描述的顺序枚举每个prototype对象的属性。尽管已经枚举了一个属性,但是任何同名的属性都不会再次被枚举。属性,即使已经考虑了同名的不可枚举属性,也不会枚举。

代码语言:javascript
复制
const obj = {};

obj[2] = 2;
obj['-1'] = -1;
obj['1'] = 1;
obj['as'] = 'as';
obj['10'] = 10;
obj['b'] = 'b';

console.log(Reflect.ownKeys(obj));
console.log(Object.getOwnPropertyNames(obj));

for (const key in obj) {
  console.log(key);
}
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63327922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档