Undefined不是对象(正在计算myArray.length)
Undefined is not an object (evaluating myArray.length)
我一直在开发一个程序,该程序使用快速排序算法对数字数组进行排序。这是我的代码:
var myArray=[8,2,5,6];
function quickSort(myArray)
{
if (myArray.length === 0){
return [];
}
var left=[];
var right=[];
var pivot= myArray[0];
for (var i=1; i<myArray.length; i++){
if (myArray[i]<pivot) {
left.push(myArray[i]);
}
else {
right.push(myArray[i]);
}
}
return quickSort(left).concat(pivot, quickSort(right));
document.getElementById().innerHTML = quickSort(left).concat(pivot, quickSort(right));
}
这是我的html
<html>
<h1>QuickSorter</h1>
<button onclick="quicksort()">Quick Sort It!</button>
<script src="quicksort.js"> </script>
</html>
safari中的控制台不断向我显示:
TypeError: undefined is not an object (evaluating myArray.length)
我真的不明白为什么它不起作用。如有任何帮助,我们将不胜感激。
如果使用调用函数
quicksort()
您没有传入任何参数。但是,您的函数从开始
function quickSort(myArray)
{
if (myArray.length === 0){
return [];
}
由于没有参数传递给quicksort
,因此myArray
未定义。未定义的变量不是对象,因此不能具有length
等属性。
编辑:
为了在单击按钮时调用函数,最好用javascript设置事件侦听器,而不是将其放在HTML中。
给按钮一个ID名称并删除onclick
属性:
<button id="sortButton">Quick Sort It!</button>
然后在quickSort
定义之后在JavaScript中添加事件侦听器:
document.getElementById("sortButton").onclick = function(){quickSort(myArray);});
您不会将参数传递给html onclick中的函数。因此,myArray最终在函数中未定义。请注意,u在函数外部定义的myArray与它内部定义为函数的参数的myArray不同
不知道这是否有帮助,但document.getElementsByClassName没有返回任何样式,
所以,当通过类名访问元素时,它会给您带来和您在问题中提到的相同的错误。
下面的代码来自我的项目。
document.getElementById("profile-main-div").style.display=="none". //Working
document.getElementsByClassName("profile-main-div").style.display=="none". //Not Working
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- 计算CSS3缩放框在另一个框中的最高位置
- 如何计算二十面体的法线
- if(foo!==null)的计算结果为true,即使foo为null
- 在Angular中重新使用HTML端的计算文本
- Undefined不是对象(正在计算myArray.length)