开发者问题收集

属性说无法读取,即使它可以读取属性

2018-08-09
107

在我开始之前,我只想说我对 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

我正在处理一个非常大的项目,我不知道是否故意多次调用此方法...但我认为这是故意的。

2个回答

尝试一下

 alert(this.quoteService['activeBasket']['components'].length === undefined ? '' : this.quoteService['activeBasket']['components'].length);
Chellappan வ
2018-08-09

这个问题已经解决了!我确实想感谢 Chellappan ,因为如果没有他的回答,我就无法找到解决方案。

基本上,必须多次调用 validateOutfitLength 方法,并且在其中一些调用中, quoteService.activeBasket.accommodations/components 未定义。修复很简单,只是在对值执行任何操作之前检查对象是否未定义。

let accoms = this.quoteService.activeBasket.accommodations;
if (typeof(accoms) != 'undefined') {
    // do something with accoms
}
Logan
2018-08-09