Javascript 未定义在没有初始值设定项的情况下声明的对象
当我在subscribe方法中定义一个对象时,当我试图给它赋值时,这个对象看起来是未定义的。 “\u file”和“this.fileObjects”似乎都未定义。 有谁能给我一个如何解决这个问题的提示吗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 '../
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,因为此处未定义_filelet _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={};