这是我的阵列
let setOne = [""];现在,我创建了一个函数,该函数从数组(即setOne )获取元素,将该元素存储在一个对象中作为属性名,并给该属性名称一个true的值,并打印对象数据。
功能是
function checkTheSameBetter(setOne) {
let ObjectShop = {};
for (let indexSetOne = 0; indexSetOne < setOne.length; indexSetOne++) {
ObjectShop[setOne[indexSetOne]] = true;
}
console.log(ObjectShop);
}我得到的输出是
{ '': true }到目前为止没有问题
下面是我在数组中添加另一个值的主要部分,即setOne,考虑"1“。
let setOne = ["",1];然后当我执行函数checkTheSameBetter.时我得到输出
{'1': true, '': true }所以我的问题是,“这个'1‘是如何被存储在第一个位置的?” 我期望的输出是这样的。
{'': true, '1': true}下面是沙箱链接https://codesandbox.io/s/cranky-cori-qx116?file=/src/index.js 有人能告诉我这里发生了什么吗?如果你需要澄清,我会给你的。
谢谢
发布于 2020-08-09 15:27:45
ES6定义了枚举对象自身属性的顺序。以下是列举对象自身属性的规则:
下面的函数按上述顺序列出属性,但须受它们自身的约束。
Object.keys()Object.getOwnPropertyNames()Object.getOwnPropertySymbols()Reflect.ownKeys()需要记住的一点是,for in循环的枚举顺序并不像上面提到的枚举函数那样严格指定,但是它通常按照上面描述的顺序枚举自己的属性。
由于for in循环还枚举了prototype链中的属性,一旦枚举了自己的属性,它就会在prototype链上移动,按照上面描述的顺序枚举每个prototype对象的属性。尽管已经枚举了一个属性,但是任何同名的属性都不会再次被枚举。属性,即使已经考虑了同名的不可枚举属性,也不会枚举。
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);
}.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/63327922
复制相似问题