Javascript Angular Typescript将对象推入数组,以了解错误
因此,我尝试在我的应用程序中使用windows.localstorage创建一个对象数组Javascript Angular Typescript将对象推入数组,以了解错误,javascript,arrays,angular,typescript,Javascript,Arrays,Angular,Typescript,因此,我尝试在我的应用程序中使用windows.localstorage创建一个对象数组 export class MyListComponent implements OnInit { public myStorage = window.localStorage; public list : any [] = []; public empty = true; constructor() { } ngOnInit(): void { for(var k in
export class MyListComponent implements OnInit {
public myStorage = window.localStorage;
public list : any [] = [];
public empty = true;
constructor() { }
ngOnInit(): void {
for(var k in window.localStorage) {
var temp = this.myStorage[k].split(",");
console.log(temp);
if(temp.length == 4) {
let item = {
id: k,
type: temp[1]
}
this.empty = false;
this.list.push(item);
console.log(item);
}
}
console.log(this.list);
}
}
出于某种原因,最后一行console.log(this.list)似乎不起作用,或者换句话说,它没有添加任何内容。我不知道为什么会这样,因为所有其他控制台日志似乎都在工作,比如console.log(temp)和console.log(item)。我的控制台还显示以下错误:
错误类型错误:this.myStorage[k]。split不是MyListComponent.ngonit上的函数
为什么呢?如果它没有成功拆分,那么就不会创建temp。如何将我的项对象添加到列表数组中,以及为什么此.myStorage.split出现typeerror?您不能对“window.localStorage”(存储{editorLastConnected:“1617595775”,editorHasEmittedBundle:“true”)中的变量使用“split”函数 在第一次for循环迭代中,temp变量将保留“editorLastConnected”的值,该值没有“,”且“split”函数不能使用 在for循环迭代的第二次迭代中。您的临时变量将选择没有“”的“editorHasEmittedBundle”的值,并且不能使用“split”函数
因此将抛出错误。您可以像下面这样尝试。此外,不建议对此类实例(如localStorage)使用for…in循环,因为它会迭代所有可枚举属性,而不仅仅是自己的属性
Object.keys(window.localStorage).forEach(k => {
const value = window.localStorage[k];
if (value) {
var temp = value.split(",");
console.log(temp);
if (temp.length == 4) {
let item = {
id: k,
type: temp[1]
}
this.empty = false;
this.list.push(item);
console.log(item);
}
}
});
谢谢,成功了。我还不熟悉angular和所有这些,所以我很困惑为什么我的代码不能工作。老实说,我仍然有点不明白为什么这样做,为什么我的不这样做,但我想这可能就是语法的设计方式。您直接调用split(),而没有选中“this.myStorage[k].split(“,”;”),这就不同了。一旦it中断(引发异常),该线程的执行将自行停止,除非您使用try…catch()处理该异常。localStorage可能只有键而没有值。此外,localStorage有一个继承的属性“length”,它返回数字,用于循环中的…而无需像这样直接使用字符串检查。myStorage[k]。拆分(“,”)将中断代码。我相信你的情况就是这样。