【问题标题】:JS keep reporting "toString" method is undefinedJS不断报告“toString”方法未定义
【发布时间】:2020-09-06 02:57:35
【问题描述】:

我的目标是按字母顺序排列 givin 字符串。例如,给定字符串“The Holy Bible”,应该得到“BbeehHilloTy”。下面是代码:

function alphabetized(s) {
  let sArray = s.split(" ").join("").split("");
  //below to perform a bubble sorting
  for (let i = 0; i < sArray.length; i++) {
    for (let j = 0; j < sArray.length - i; j++) {
      if ((sArray[j].toString().toLowerCase()) > (sArray[j + 1].toString().toLowerCase())) {
        let tempItem = sArray[j];
        sArray[j] = sArray[j + 1];
        sArray[j + 1] = tempItem;
      }
    }
  }
  return sArray.join("");
}

console.log(alphabetized('The Holy Bible'));

我不断从 JS 控制台收到错误:

if ((sArray[j].toString().toLowerCase()) > (sArray[j + 1].toString().toLowerCase())) {
TypeError: Cannot read property 'toString' of undefined

任何帮助将不胜感激!

【问题讨论】:

  • 仔细阅读消息。不是“toString 未定义”,而是“toString of 未定义”。
  • i0 时,sArray.length - i 将与sArray.length 相同,因此sArray[j + 1] 将超出范围。

标签: javascript tostring


【解决方案1】:

这就是问题所在。 变量未定义,无法调用 toString 方法。 所以你只需要添加这个代码。如果你不想做任何事情

if(!sArray[j + 1]) continue;

这是一个小提示。调试是一个很好的编码工具。试试看!

【讨论】:

  • 谢谢!在调用 toString() 方法之前,我应该评估将调用该方法的值是否存在。
【解决方案2】:

问题不在于toString 未定义。那是您试图在 未定义的东西上调用 toString()

由于您在评估数组的结果上调用toString(),因此您引用的数组元素似乎无效。您可以在两个地方执行此操作:sArray[j]sArray[j+1 ]。由于您将 j 从 0 循环到数组的长度,因此您可以评估一个超过数组长度的值。

作为调试的一部分,请尝试同时记录 j 的值以及您认为要评估的字符应该是什么。

【讨论】:

  • 非常清晰的评论,看起来这对我来说是全新的......谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多