属性说无法读取,即使它可以读取属性
在我开始之前,我只想说我对 javascript 的经验很少,所以也许我遗漏了一些非常明显的东西,但无论如何。
我有一个名为 Accommodations 的对象数组。我有以下代码:
alert(this.quoteService.activeBasket.components.length);
此警报显示长度为 3,但我收到大量错误:
An unexpected error has occurred. TypeError: Cannot read property 'length' of undefined
我只是不确定它怎么可能读取 .length 属性,但它抛出了它无法读取的错误...
最初,组件对象未导入到此文件中,但即使导入后,我仍然遇到相同的错误...
非常感谢任何帮助。
编辑:
这里有更多背景信息: 基本上,我有一个包含单选按钮的 html 文件,根据 ng-disabled 标记中找到的方法,此按钮应为灰色:
<li class="c-3-12">
<div class="radio-btn" tl-field>
<input type="radio" class="radio" ng-model="vm.requiredBookingState"
ng-value="1" ng-disabled="!vm.validateOutfitLength()">
<label i18n>Confirmed</label>
</div>
</li>
这是该方法:
validateOutfitLength()
{
var rv = true;
let accoms: Accommodation[] = this.quoteService.activeBasket.accommodations;
accoms.forEach(accom => {
if (accom.outfitLength < 350) {
rv = false;
}
});
return rv;
}
此代码的错误与上面的不同!此错误为:
An unexpected error has occurred. TypeError: Cannot read property 'forEach' of undefined
我正在处理一个非常大的项目,我不知道是否故意多次调用此方法...但我认为这是故意的。
尝试一下
alert(this.quoteService['activeBasket']['components'].length === undefined ? '' : this.quoteService['activeBasket']['components'].length);
这个问题已经解决了!我确实想感谢 Chellappan ,因为如果没有他的回答,我就无法找到解决方案。
基本上,必须多次调用
validateOutfitLength
方法,并且在其中一些调用中,
quoteService.activeBasket.accommodations/components
未定义。修复很简单,只是在对值执行任何操作之前检查对象是否未定义。
let accoms = this.quoteService.activeBasket.accommodations;
if (typeof(accoms) != 'undefined') {
// do something with accoms
}