Javascript 无法读取属性';长度';未定义的,尽管检查未定义

Javascript 无法读取属性';长度';未定义的,尽管检查未定义,javascript,reactjs,Javascript,Reactjs,我正在编写一些代码来根据数组中的项生成JSX,但是我得到了一个错误“无法读取未定义的属性”length”,尽管检查了变量是否实际上未定义。代码非常长,因此我在这里总结了问题: render() { var metadata = this.props.data["metadata"] if(typeof metadata !== undefined && metadata.length !== undefined) { for(var i=0;

我正在编写一些代码来根据数组中的项生成JSX,但是我得到了一个错误“无法读取未定义的属性”length”,尽管检查了变量是否实际上未定义。代码非常长,因此我在这里总结了问题:

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(){
var metadata=this.props.data[“metadata”]
if(元数据类型!==未定义&&metadata.length!==未定义){
对于(var i=0;i字符串
“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]);
        }
    }
}
render(){
var metadata=this.props.data[“metadata”]
如果(元数据!==未定义&&metadata.length!==未定义){

对于(var i=0;i您也可以使用
Array.isArray
方法:

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

或者简单地说。您还可以检查
metadata.length>0(而不仅仅是长度)

render(){
var metadata=this.props.data[“metadata”]
if(metadata&&metadata.length){

对于(var i=0;i
!==“undefined”
->
!==undefined
您在
元数据.length
中有一个空格,就在点之前…这是复制粘贴错误吗?另外,可以简化为
if(metadata&&metadata.length){…}
@LGSon一个空格很重要,只要它实际上是一个空格。如果它是一个奇怪的unicode字符,那么这就是一个问题。@LGSon在一个点之前加空格,虽然可能是无意的,但不会对代码产生任何影响。感谢您的快速回复!我已经将它改为“欠定义”,而不是“未定义”,但我仍然会收到相同的错误。还与检查过 null@RayA.当然可以!你能试着打印元数据等于什么吗?Doing console.log(“metadata:+metadata”)打印“metadata:Student name,task_id,…”@RayA.那么定义的
元数据看起来是这样的。你确定你发布的错误是正确的,并且发生在你说发生的地方吗?我已经仔细检查了错误。这是javascript控制台中出现的问题:Uncaught TypeError:无法读取ProxyComponent.render中undefined的属性“length”…上面的错误r出现在组件中:在Marksheet(Interaction.jsx:579)中,此条件检查简单且简短。无需担心它是未定义的还是空的。Array.isArray足以执行条件检查,因此+1 upvote就可以了。我刚刚尝试了isArray。奇怪的是,它仍然会出现相同的错误。我尝试了if(Array.isArray(metadata)){console.log(“它是一个数组!”)console.log(“长度是:“+metadata.length”),它正确地打印出长度,但javascript控制台仍然表示无法读取未定义的属性长度,并且应用程序崩溃:(该错误不能来自该代码,您在其他地方有一些容易出错的代码。可能在componentDidMount中?您是对的。看起来代码的另一部分给出了相同的错误。)
render() {
    var metadata = this.props.data["metadata"];
    if(Array.isArray(metadata)) {
      metadata.forEach(val => console.log(val));
    }
}
render() {
    var metadata = this.props.data["metadata"]

    if(metadata && metadata.length) {

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

    }

}