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