4种修复JavaScript中“无法读取未定义的属性‘推送’”错误的方法了解如何轻松修复JavaScript中的“无法读取未定义的属性‘推送’”错误。当您尝试对旨在包含数组但实际包含未定义值的变量调用push()方法时,JavaScript中会出现“无法读取未定义的属性‘push’”错误。这可能是由多种原因引起的:在没有先用数组初始化变量的情况下调用变量的push()方法。push()方法是针对数组元素而不是数组本身调用的。对先前设置为未定义的变量调用push()方法。对不存在或值为未定义的对象属性调用push()方法。我们将在本文中探讨针对所有这些可能原因的实用解决方案。1.在变量上调用push()方法而不先用数组初始化要修复“无法读取未定义的属性‘push’”错误,请确保在调用push()方法之前用数组初始化变量。letdoubles;letnums=[1,2,3,4,5];for(constnumofnums){letdouble=num*2;//?TypeError:cannotreadpropertiesofundefined(reading'push')doubles.push(double);}console.log(doubles);在上面的示例中,我们调用了doubles变量的push()方法,而没有先对其进行初始化。让双打;console.log(双打);//undefined由于未初始化的变量在JavaScript中具有默认值undefined,因此调用push()将引发错误。要修复这个错误,我们所要做的就是将doubles变量分配给一个数组(对于我们的用例来说是空的)://?"doubles"initializedbeforeuseletdoubles=[];letnums=[1,2,3,4,5];for(constnumofnums){letdouble=num*2;//?调用了push()-没有抛出错误doubles.push(double);}console.log(doubles);//[2,4,6,8,10]2.对数组元素而不是数组本身调用push()方法要修复“无法读取未定义的属性‘push’”错误,请确保在调用之前push()不是访问数组变量中的元素,而是对实际数组变量调用push()。constarray=[];//TypeError:Cannotreadpropertiesofundefined(reading'push')array[0].push('html');array[0].push('css');数组[0].push('javascript');console.log(array);使用方括号索引访问0属性为我们提供了数组索引0处的元素。该数组没有元素,因此arr[0]的计算结果为undefined并且对其调用push()会导致错误。要解决此问题,我们需要对数组变量而不是其元素之一调用push。constarray=[];//?在“array”变量上调用push(),而不是“array[0]”array.push('html');array.push('css');array.push('javascript');console.log(数组);//['html','css','javascript']3.对先前设置为未定义的变量调用push()方法以修复“无法读取未定义的‘push’属性”错误,确保分配给变量的最后一个值不是未定义的。letarr=['orange'];arr.push('watermelon');arr=undefined;//数百行代码...//?TypeError:Cannotreadpropertiesofundefined(reading'push')arr.推('苹果');控制台日志(arr);这里的问题是我们曾经显式地将变量设置为未定义,但随后我们在变量上调用了push()。对此的修复将根据您的情况而有所不同。也许你在再次使用之前忘记将变量设置为定义的值:letarr=['orange'];arr.push('西瓜');//?Fixed:变量重新赋值arr=['banana'];//数百行代码...arr.push('apple');console.log(arr);//['banana','apple']或者,也许你犯了一个错误,根本没有打算将变量压入Assigntoundefined:letarr=['orange'];arr.push('西瓜');//arr=未定义;?修复:删除行arr.push('apple');控制台日志(arr);//['橙子','西瓜','苹果']4.在不存在或值为未定义的对象属性上调用push()方法要修复JavaScript中的“无法读取未定义的属性‘push’”错误,请确保push()方法所在的对象属性调用存在且未定义。conststudents=[{name:'Mac',scores:[80,85]},{name:'Robert'},{name:'Michael',scores:[90,70]},];//?TypeError:无法读取未定义的属性(读取“push”)students[1].scores.push(50);在这种情况下,错误发生是因为索引1处的对象元素没有得分属性。constobj={};console.log(obj.prop);//undefined从一个对象访问一个不存在的属性不会在JavaScript中抛出错误,而是会给你一个未定义的值。如果您尝试在该不存在的属性上调用类似push()的方法,您将收到错误消息。在这种情况下,我们可以通过将第二个数组元素的score属性设置为定义的值来修复错误。conststudents=[{name:'Mac',scores:[80,85]},//?Fixed:"scores"设置为定义值{name:'Robert',scores:[]},{name:'Michael',scores:[90,70]},];//?“scores”属性存在,“push()”有效——没有抛出错误students[1].scores.push(50);
