【问题标题】:String.equals is not a function in Web WorkerString.equals 不是 Web Worker 中的函数
【发布时间】:2021-01-04 22:27:48
【问题描述】:

我正在转换以前工作但在某些任务期间锁定 UI 的表,以由 Web Worker 管理。我正在更新的功能之一是排序。我的旧排序功能已转换为:

function mySort(column){
    myWorker.postMessage({ message: "sort", column: column.id });
}

在我的工人中:

self.onmessage = function (e) {
    switch (e.data.message) {
        case "sort":
            DoSort(e.data.column);
            break;
    }
}

var m_sortCol;
function DoSort(column) {
    if (m_sortCol != null && column.equals(m_sortCol)) // <---- The problem is here
        myData.reverse();
    else {
        m_sortCol = column;
        myData.sort(column);
    }
}

问题是,当我的工作人员到达指定的行时,它会抛出异常,column.equals is not a function. 查看调试器中的数据,columnm_sortCol 都有值,它们看起来确实像字符串,虽然我没有看到明确说明对象类型的任何地方。我试过把语句改成column.toString().equals(m_sortCol.toString()),异常改成column.toString(...).equals is not a function.

此代码在更改为 Web Worker 之前可以正常工作。网络工作者是否会以某种方式弄乱我的类型,以至于看起来像字符串的东西实际上不是字符串?或者工人不能以某种方式访问​​字符串函数?我的研究表明网络工作者应该具有字符串函数,但我不知道如何解释这一点。

【问题讨论】:

  • String values don't have an equals method, anywhere。在将 column 转移给工作人员之前,它的价值是多少?
  • 如果要比较字符串,请使用===
  • 字符串是 Javascript 中的一个原语,所以你可以使用==(或===
  • 好吧,现在我回顾一下我的来源,我发现文章fluentthemes.com/compare-strings-correctly-javascript 似乎在说 Java 和 Javascript 之间来回切换。尽管我的搜索一直是 Javascript,但我正确地说 Java 的所有其他链接。所以这很令人沮丧。
  • 这确实引发了一个问题,为什么它以前可以工作。

标签: javascript string string-comparison web-worker


【解决方案1】:

我怀疑您的字符串原型已被修改,因为标准 Javascript 字符串类型上没有 .equals 函数。在这种情况下,您应该简单地使用 == 或 ===。 (这是为什么修改字符串原型在 Javascript 中被认为是错误形式的一个例子)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2019-01-15
    相关资源
    最近更新 更多