我正在编写一些代码以基于数组中的项目生成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} />
我已经检查过,以确保确实定义了数据并将其作为道具提供,但是即使数据未定义,我也不明白为什么它说不能读取未定义的属性长度。
答案 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循环之前,基本上检查以确保metadata
和metadata.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]);
}
}
}