在我开始之前,我只想说我对javascript的了解很少,所以也许我错过了一些非常明显的东西,但是无论如何。
我有一个名为Accommodations的对象数组。我有以下代码:
alert(this.quoteService.activeBasket.components.length);
此警报显示的长度为3,但我收到大量错误消息:
发生意外错误。 TypeError:无法读取未定义的属性“ length”
我只是不确定它是否可以读取.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;
}
此代码的错误与上面的不同!错误是:
发生意外错误。 TypeError:无法读取未定义的属性“ forEach”
这是我正在处理的一个非常大的项目,并且我不知道是否有意多次调用此方法……不过我认为这是有意的。
答案 0 :(得分:0)
尝试
alert(this.quoteService['activeBasket']['components'].length === undefined ? '' : this.quoteService['activeBasket']['components'].length);
答案 1 :(得分:0)
此问题已解决!我确实想对Chellappan表示感谢,因为没有他的答复我将找不到解决方案。
基本上,必须有多个对validateOutfitLength
方法的调用,并且在其中一些调用中,quoteService.activeBasket.accommodations/components
是未定义的。修复很简单,它只是在对值进行任何处理之前先检查对象是否未定义。
let accoms = this.quoteService.activeBasket.accommodations;
if (typeof(accoms) != 'undefined') {
// do something with accoms
}