我该如何解决这个 toString() 错误?

how can i solve this toString() error?

错误是由 toString() 函数产生的。

"error" "TypeError: Cannot read property 'toString' of undefined

Image of error

这是代码:

while(  items[i][j].toString().charCodeAt() < items[i][j-1].toString().charCodeAt()  )

  {
    var temp =items[i][j];

    items[i][j]=items[i][j-1];

    items[i][j-1]=temp ;

    j=j-1;

  }

您确定 j 变量永远不会等于 0 吗?

如果你有两个像这样的圆圈:

var arr = [[1,2,3], 
           [4,5,6],
           [7,8,9]];

for (var i = 0; i < arr.length; ++i) {
  for (var j = 0; j < arr[i].length; ++j) {
    arr[i][j - 1].toString() // error
  }
}

你有错误,因为 j 在第一次等于 -1 即 "undefined",未定义没有 toString() 方法

在第二个圆圈中设置 j = 1 的起始值,您就解决了这个错误。

错误的发生是因为 [j-1] 最终将尝试访问 non-existent 索引。假设一个典型的数组,这将在以下时间发生:

var j = 0;
console.log(items[i][j-1]); // undefined

console.log(items[i][-1]); // undefined

而且,undefined 值不允许使用方法。

为避免这种情况,循环还应检查是否已到达终点:

while ( j > 0 && items[i][j]... ) {
    // ...
    j=j-1;
}