Undefined不是对象(正在计算myArray.length)

Undefined is not an object (evaluating myArray.length)

本文关键字:计算 myArray length 对象 Undefined      更新时间:2023-09-26

我一直在开发一个程序,该程序使用快速排序算法对数字数组进行排序。这是我的代码:

    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