尽管检查了undefined,但无法读取undefined的属性“ length”

时间:2018-12-28 00:01:50

标签: javascript reactjs

我正在编写一些代码以基于数组中的项目生成JSX,但是尽管进行了检查以查看变量是否确实未定义,但是却收到错误消息“无法读取未定义的属性的“长度””。代码真的很长,所以我在这里总结了问题:

render() {
    var metadata = this.props.data["metadata"]

    if(typeof metadata !== undefined && metadata.length !== undefined) {

        for(var i=0; i<metadata.length; i++) {
            console.log(metadata[i]);
        }

    }

}

render方法位于组件内部,通过执行此操作放置在另一个组件内部

<Marksheet data={this.state.data} />

我已经检查过,以确保确实定义了数据并将其作为道具提供,但是即使数据未定义,我也不明白为什么它说不能读取未定义的属性长度。

3 个答案:

答案 0 :(得分:4)

您还可以使用Array.isArray方法:

render() {
    var metadata = this.props.data["metadata"];
    if(Array.isArray(metadata)) {
      metadata.forEach(val => console.log(val));
    }
}

答案 1 :(得分:2)

字符串"undefined"undefined不同。

尝试将代码更改为以下内容:

render() {
    var metadata = this.props.data["metadata"]

    if(metadata !== undefined && metadata.length !== undefined) {
        for(var i=0; i<metadata.length; i++) {
            console.log(metadata[i]);
        }
    }
}

在运行该for循环之前,基本上检查以确保metadatametadata.length都不等于undefined。

答案 2 :(得分:1)

或者只是简单地。您可能还会检查metadata.length >0 (instead of just length)

render() {
    var metadata = this.props.data["metadata"]

    if(metadata && metadata.length) {

        for(var i=0; i<metadata.length; i++) {
            console.log(metadata[i]);
        }

    }

}