Javascript 返回的数组打印数组索引而不是值

Javascript 返回的数组打印数组索引而不是值,javascript,node.js,arrays,for-loop,Javascript,Node.js,Arrays,For Loop,我得到了一个FileHelper方法,它列出了所有文件的名称,并最终返回文件名: import fs from 'fs'; import path from 'path'; class FileHelper { static ListFiles() { const fileDir = `${path.resolve()}/Specifications/`; let files = fs.readdirSync(fileDir); fo

我得到了一个FileHelper方法,它列出了所有文件的名称,并最终返回文件名:

import fs from 'fs';
import path from 'path';

class FileHelper {

    static ListFiles() {
        const fileDir = `${path.resolve()}/Specifications/`;
        let files = fs.readdirSync(fileDir);

        for (const file in files) {
            console.log(file); // Prints filename correctly: 'petstore.json'
        }

        return files;
    }

}

export default FileHelper;
但是,当我调用此方法并在for循环中再次打印它时,它将打印数组索引而不是值:

import FileHelper from './Helpers/FileHelper.js';

 function main() {  
  try {
    let specifications = FileHelper.ListFiles();

    for (const specification in specifications) {   
      console.log(specification); // prints '0' instead of 'petstore.json'
    }
  }
  catch(err) {
    console.error(err);
  }
}


main();

为什么不在第二个for循环中打印文件名?谢谢

避免使用来迭代数组。改用

范例

for (const specification of specifications) {
  console.log(specification);
}

看到键的原因是,
for…in
循环迭代数组的键

函数main(){
试一试{
让规范=FileHelper.ListFiles();
用于(常量输入规范){
const{[key]:value}=规范;
//^上述行相当于
//常量值=规格[键]
console.log(键、值);
}
}
捕捉(错误){
控制台错误(err);
}
}
请查看,其中解释了:

for…in语句遍历由字符串设置键控的对象的所有可枚举属性(忽略由符号设置键控的属性),包括继承的可枚举属性

在对您的问题的评论中,Arun链接到一个优秀的StackOverflow问题,该问题解释了实现您的目标的不同方式:

其中一种替代方法是,看起来:

for(规范的常量规范){
控制台日志(规范);
}
for…of语句创建了一个循环,循环遍历iterable对象,包括:内置字符串、数组、类似数组的对象(例如参数或节点列表)、TypedArray、Map、Set和用户定义的iterable。它调用一个定制的迭代钩子,并为对象的每个不同属性的值执行语句

此外,您还可以使用在阵列上进行ierate。这是一种方法:

规范
.forEach((当前键)=>{
const{[currentKey]:specificationValue}=规范;
console.log(currentKey,specificationValue);
})
或者你也可以用老式的方法——使用
for
循环:

for(设i=0;i
for..in
仅对键进行迭代。因此,第二段代码是正确的。我不知道为什么第一个会给你名字,
fs.readdirSync()
会以任何方式返回一个数组,所以检查数组的键会给你索引。这能回答你的问题吗@ArunKumarMohan虽然这个问题是相关的,但这里的问题是,为什么在同一个数组中使用for..in两次会产生完全不同的结果。@VLAZ是的,你是对的。但是我无法复制这个问题。谢谢你的提示!我本应该用…代替…的