1

我收到错误“id.replace 不是函数”

以下是我认为相关代码的内容。我遗漏了一些明显的东西,但我的大脑目前是糊状的。

getSyncDbFile: function (config, id) {
    if (id === null)
    {
        com.synckolab.tools.logMessage("Error: entry has no id (" +config.name + ": " + config.type + ")", com.synckolab.global.LOG_ERROR);
        return null;
    }

    com.synckolab.tools.logMessage("syncDbFile:  (" +com.synckolab.tools.text.fixNameToMiniCharset(config.serverKey) + "/" + config.type + "_" + config.name + "/" + id + ")", com.synckolab.global.LOG_ERROR);

    id = id.replace(/[ :.;$\\\/]\#\@/g, "_");
    var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
    try {
        file.append("synckolab");
        if (!file.exists()) {
            file.create(1, parseInt("0775", 8));
        }

        file.append(com.synckolab.tools.text.fixNameToMiniCharset(config.serverKey));
        if (!file.exists()) {
            file.create(1, parseInt("0775", 8));
        }


        file.append(config.type + "_" + config.name);
        if (!file.exists()) {
            file.create(1, parseInt("0775", 8));
        }

        file.append(id);
    }
    catch (ex)
    {
        com.synckolab.tools.logMessage("Problem with getting syncDbFile:  (" +com.synckolab.tools.text.fixNameToMiniCharset(config.serverKey) + "/" + config.name + ": " + config.type + ": " + id + ")\n" + ex, com.synckolab.global.LOG_ERROR);
        return null;
    }
    return file;
}
4

3 回答 3

2

正如其他人指出的那样,id需要是一个字符串。我们不知道它是什么类型。

就在行前

id = id.replace(/[ :.;$\\\/]\#\@/g, "_");

添加这两行:

console.log(id);
console.log(typeof id);

这将使我们知道这些是什么以及是否传递了正确的值。

于 2012-09-18T17:10:42.463 回答
1

你试过了吗??

id = String(id).replace(/[ :.;$\\\/]\#\@/g, "_"); 

我认为这会奏效。因为 replace 是一个字符串函数

注意:通过使用此方法,它将给出布尔结果而不是返回字符串。

于 2012-09-21T04:37:52.920 回答
0

改变 :

id.replace(/[ :.;$\\\/]\#\@/g, "_");

至:

(id+"").replace(/[ :.;$\\\/]\#\@/g, "_");
于 2012-09-18T17:07:30.420 回答