Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未定义在没有初始值设定项的情况下声明的对象_Javascript_Angular_Http_Submit - Fatal编程技术网

Javascript 未定义在没有初始值设定项的情况下声明的对象

Javascript 未定义在没有初始值设定项的情况下声明的对象,javascript,angular,http,submit,Javascript,Angular,Http,Submit,当我在subscribe方法中定义一个对象时,当我试图给它赋值时,这个对象看起来是未定义的。 “\u file”和“this.fileObjects”似乎都未定义。 有谁能给我一个如何解决这个问题的提示吗 import { Component, OnInit} from '@angular/core'; import {DataTransferService} from '../data-transfer.service'; import {DataModelService} from '../

当我在subscribe方法中定义一个对象时,当我试图给它赋值时,这个对象看起来是未定义的。 “\u file”和“this.fileObjects”似乎都未定义。 有谁能给我一个如何解决这个问题的提示吗

import { Component, OnInit} from '@angular/core';
import {DataTransferService} from '../data-transfer.service';
import {DataModelService} from '../data-model.service';
import {Location} from '@angular/common';

@Component({
  selector: 'app-open-selector',
  templateUrl: './open-selector.component.html',
  styleUrls: ['./open-selector.component.css']
})
export class OpenSelectorComponent implements OnInit {

  fileObjects:File[];
  constructor(private fData:DataTransferService, public location:Location) { }

  ngOnInit() {
    this.getFileList();
  }

   private getFileList() {
     this.fileObjects = [];
      this.fData.getFileList().subscribe((files) => {
        let _file:File;
        for(let i=0; i<files.length; i++) {
          let tmpArray:string[];
          tmpArray = files[i].split('|');
          _file.fileName = files[i];
          _file.owner = tmpArray[0];
          _file.brand = tmpArray[1];
          _file.serial = tmpArray[2];
          _file.flags = tmpArray[3];
          this.fileObjects.push(_file);
        }  
      });
    }

}

interface File {
    fileName:string,
    owner:string,
    brand:string,
    serial:string,
    flags:string
}
从'@angular/core'导入{Component,OnInit};
从“../data transfer.service”导入{DataTransferService};
从“../data model.service”导入{DataModelService};
从“@angular/common”导入{Location};
@组成部分({
选择器:“应用程序打开选择器”,
templateUrl:“./open selector.component.html”,
样式URL:['./打开选择器.component.css']
})
导出类OpenSelector组件在NIT上实现{
fileObjects:File[];
构造函数(私有fData:DataTransferService,公共位置:location){}
恩戈尼尼特(){
这个文件名为.getFileList();
}
私有getFileList(){
this.fileObjects=[];
this.fData.getFileList().subscribe((文件)=>{
let_file:file;

对于(let i=0;i,因为此处未定义_file
let _file:file;
。当您进行类似于
_file.fileName=files[i];
的赋值时,它将抛出

“找不到未定义的文件名”

错误


因此,在Javascript中初始化变量
let _file:file={};

,您必须声明并定义变量

let\u file;
//这声明了变量。但是默认值是
undefined

另外,在js函数的
这个
对象中,没有名为
文件对象
的值。因此,它也是未定义的

解决方案是在尝试使用这些值之前定义它们

private getFileList() {

    this.fileObjects = []; // fileObjects defined as array

    this.fData.getFileList().subscribe((files) => {

    let _file:File = {}; // assign empty value to _file

         for(let i=0; i<files.length; i++) {
              let tmpArray:string[];
              tmpArray = files[i].split('|');
              _file.fileName = files[i];
              _file.owner = tmpArray[0];
              _file.brand = tmpArray[1];
              _file.serial = tmpArray[2];
              _file.flags = tmpArray[3];
              this.fileObjects.push(_file);
         }  
    });
}
private getFileList(){
this.fileObjects=[];//定义为数组的fileObjects
this.fData.getFileList().subscribe((文件)=>{
让_file:file={};//将空值赋给_file

例如,当我定义一个对象时,你可以尝试
let\u file:file={};
?你是在声明一个变量,而不是“定义一个对象”*尝试给它赋值不,你是在给它的属性赋值。问题解决了:let\u file:file={“fileName”:“owner”:“brand”:“serial”:“flags”:“};成功了。谢谢你给我指出了正确的方向。最佳做法是使用
const
而不是
let
“let{file:file={}”;给定类型“{}”不能分配给类型“file”let{file:file={“fileName”:“owner”:“brand”:“serial”:“flags”:;成功了。@Mark TS必须检查正确的键入方式。您也应该能够执行
File=new File()
操作。给定类型“{}”不可分配给类型“File”@Mark您可以将其更改为
let{File:any={};
或者
let{File:File={};