【问题标题】:Cannot read property 'toLocaleString' of undefined [duplicate]无法读取未定义的属性“toLocaleString”[重复]
【发布时间】:2019-06-12 17:55:11
【问题描述】:

我有一个 Tampermonkey 脚本,可以将一些信息添加到基于浏览器的游戏中。我使用一段简单的代码根据玩家的语言环境为数字添加千位分隔符:

function nThousand(x) {
    return x.toLocaleString();
}

这个函数在很多代码中都有用到,例如:

$("#CustomStats" + stat).html(
"<b>" + texts[lang].stat_points_need + ":</b> " + nThousand(remainingPoints) + "<br />" +
"<b>" + texts[lang].money_need + ": </b>" + nThousand(remainingMoney) + "<br />" +
"<b>" + texts[lang].money_spent + ": </b>" + nThousand(currentMoney) + "<br /><br />" +
"<b>" + texts[lang].bought_points + ": </b>" + nThousand(boughtPoints) + "<br />" +
"<b>" + texts[lang].equipment_points + ": </b>" + nThousand(itemPoints) + "<br />" +
"<b>" + texts[lang].points_from_level + ": </b>" + nThousand(skillPoints) + "<br />"
);

这已经完美运行了很长时间,但由于某种原因在游戏运行的特定平台上,脚本现在拒绝加载并给出以下错误消息:

无法读取未定义的属性“toLocaleString”

我已经返回了几十个版本,以确保它不是我最近添加或更改的内容,老实说,我什至不知道从哪里开始解决这个问题。该函数仅在存在要本地化的值时运行,并且它仅在游戏运行的一个特定平台上执行此操作。

我的问题:可能是什么原因造成的,我将如何解决这个问题?

【问题讨论】:

  • 什么平台有问题?哪些其他平台有效?你能确定在哪个调用中值是空的吗?您可以使用调试器来执行此操作,也可以在函数中添加对 null 参数的检查,然后 console.trace 有问题的代码。
  • 使用console.trace帮助我找出了作恶者!事实证明,它与平台没有任何关系,而是在游戏中缺少某些项目并试图提取不存在的数字的情况下。它发生在同一个平台上是一个巧合,也是以前从未发生过的事实。

标签: javascript tampermonkey


【解决方案1】:

问题不在于toLocaleString,问题在于您将undefined 传递给您的函数。您需要通过调试弄清楚为什么会发生这种情况。向函数添加一个守卫也是一个好主意,如果它传递了一个非字符串值,则返回一个空字符串。

【讨论】:

  • 在 Putr 评论的帮助下,我发现它确实是在尝试提取不存在的数字,从而使脚本崩溃。它以前从未发生过,现在在类似的情况下发生过,这是一个巨大的巧合。我已经设法通过确实使它来修复它,这样如果它试图本地化的不是数字,它就会把它变成 0。谢谢!
猜你喜欢
  • 2021-11-27
  • 1970-01-01
  • 2017-06-05
  • 2019-03-10
  • 2017-12-02
  • 2016-09-14
  • 2021-03-18
  • 2018-11-18
  • 2023-03-23
相关资源
最近更新 更多