不能读取未定义的属性,而测试是否未定义(但它是定义的)?



我在函数中有以下Typescript代码块,其中variableInQuestion = 0在函数外定义:

console.log(this.variableInQuestion);
this.arrayOfObjects.each(function(thing) {
if (this.variableInQuestion !== undefined && thing.property == this.variableInQuestion) {
...
}
});

问题是console.log行打印出了我所期望的内容(默认值0),但是我在第三行得到了一个错误,说Cannot read properties of undefined (reading 'variableInQuestion') at [[[location of the first variableInQuestion in the third line]]]。我不明白为什么它会给我一个"无法读取未定义的属性"当我在测试是否未定义时出现错误。

编辑:.each的东西是特定于所讨论的对象数组;这不是问题所在。如果我运行以下命令…

console.log(this.variableInQuestion);
this.arrayOfObjects.each(function(thing) {
if (0 !== undefined && thing.property == 0) {
...
}
});

和我期望的完全一样。

解决这个问题的方法如下:

variableInQuestion = 0;
myFunction() {
let placeholder = this.variableInQuestion;
this.arrayOfObjects.each(function(thing) {
if (placeholder !== undefined && thing.property == placeholder) {
...
}
});
}

特别感谢Pointy发现了这个问题!

如果您console.log您的数据,您将看到

class X {
variableInQuestion = 123;
arrayOfObjects = [1, 2, 3];
example() {
console.log(this.variableInQuestion);
this.arrayOfObjects.forEach(function (thing) {
console.log({
this: this,
thing: thing,
})
})
}
}
new X().example()
// 123
// { "this": undefined, thing: 1 }
// { "this": undefined, thing: 2 }
// { "this": undefined, thing: 3 }

因为forEach不保留this的值。

使用lambda

this.arrayOfObjects.forEach((thing) => { console.log(this) })

,保持this

let that = this;
this.arrayOfObjects.forEach((thing) => { console.log(that) })

,或者提供thisArgforEach(不知道.eachArray.prototype.forEach supports that)

this.arrayOfObjects.forEach(function(thing){ console.log(this) }, this)

相关内容

  • 没有找到相关文章

最新更新