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

时间:2018-08-09 16:37:12

标签: javascript angularjs typescript

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

这是我正在处理的一个非常大的项目,并且我不知道是否有意多次调用此方法……不过我认为这是有意的。

2 个答案:

答案 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
}