数组的对象键。奇特的方法

时间:2017-01-03 13:35:20

标签: javascript

假设我们有一个对象

var obj = { name:'Alex', password:'12345' };

我知道我可以获得一系列对象的密钥,如下所示:

var arr = [];
for(i in obj) { arr.push(i) }; // arr is equal to [name, password]

var arr = Object.keys(obj); // arr is equal to [name, password]

但今天我看到了这段代码:

var arr = [], i = 0;
for (arr[i++] in obj);  // arr is also equal to [name, password]

这对我没有意义......我对JS很新。有人可以解释它是如何工作的吗?

3 个答案:

答案 0 :(得分:3)

这真是一段聪明的代码。

var arr = [], i = 0;
for (arr[i++] in obj);

你知道for .. in循环中会发生什么吗?请遵循:

for (a in obj) {
  // every loop, a will have one of the key right?
}

从技术上讲,这意味着每个循环:

loop 1:
  a = obj's key 1.
loop 2:
  a = obj's key 2.
// and so on...

现在,这里arr是一个数组。我们i的价值为0

loop 1:
  a[i++] = obj's key 1. // is same as
  a[0] = obj's key 1 and increment i
// and so on...

答案 1 :(得分:1)

for in in work:

for(a in b){//copy the [first,second...] key to a;
 alert(a);
}
alert(a);//a will be the last key

现在您可以使用它来存储密钥:

for(a[i++] in obj){
//does sth like:increase i, copy the first key of obj to a[i], then loop

答案 2 :(得分:0)

for..in循环将数组的原子值分配给我们正在使用的变量。

在您的情况下,它是array元素,即keyobject的{​​{1}}的引用,存储为array keys

以下代码段将为您解答

var obj = { name:'Alex', password:'12345' };

var arr = [], i = 0;

for (arr[i++] in obj){
  //now arr[i - 1] is assigned with key in obj
  console.log(arr[i-1]); //gives the key
};