Javascript 数组的对象键。独特的方法

Javascript 数组的对象键。独特的方法,javascript,Javascript,假设我们有一个对象 var obj = { name:'Alex', password:'12345' }; 我知道我可以获得对象的键数组,如下所示: var arr = []; for(i in obj) { arr.push(i) }; // arr is equal to [name, password] 或 但今天我看到了这个代码: var arr = [], i = 0; for (arr[i++] in obj); // arr is also equal to [name,

假设我们有一个对象

var obj = { name:'Alex', password:'12345' };
我知道我可以获得对象的键数组,如下所示:

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

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

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

这对我来说毫无意义。。。我不太熟悉
JS
。有人能解释一下它是如何工作的吗?

这真是一段聪明的代码

var arr = [], i = 0;
for (arr[i++] in obj);
你知道在<代码>中发生了什么吗。。在循环中?遵循以下步骤:

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...
现在,这里是一个数组。我们有
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...
for的工作原理:

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

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

在您的例子中,它是
数组
元素,即
对象
中每个
的引用,存储为
键的
数组

下面的代码片段将回答您的问题

var obj={name:'Alex',password:'12345'};
var arr=[],i=0;
for(obj中的arr[i++]{
//现在arr[i-1]被分配了obj中的键
console.log(arr[i-1]);//给出密钥

};
与obj中的
i
类似,
i
被分配当前属性键的值,类似地
arr[i++]
被分配键并且
i
递增。如果为(obj中的o){arr.push(o)}编写
,则更有意义
因为i通常用作int countersmart,但是
Object.keys(obj)返回相同的值,但没有一些变量。我对JS不是那么陌生,但我从未见过这样的东西。我做了一些研究,来到了这个网站:很明显,你们有两种可能的形式来。。。然而,应该注意的是,“真正聪明”并不一定意味着“好”。好的代码很容易理解。@Quentin同意,这是一种让人困惑的聪明方法。
for(a[i++] in obj){
//does sth like:increase i, copy the first key of obj to a[i], then loop