在尝试通过JavaScript从导入的文本中删除有问题的字符时,我收到TypeError:此行上的名称为“ null”:

for ( var i = 0; i < name.length; i++) {

这是代码的相关部分-

fixNameToMiniCharset : function (name) {
    if(typeof name == 'undefined') {
        com.synckolab.global.consoleService.logStringMessage("undefined string " + new Error("s").stack);
    }
    var ret = "";
    // avoid double placeholders 
    var placeHolder = false;
    for ( var i = 0; i < name.length; i++) {
        switch (name.charAt(i)) {
        // character replaces... better this way
        case '\u00e4':
        case '\u00e1':
        case '\u00e0':
        case '\u00e2':
        case '\u00e3':
        case '\u00e5':
        case '\u00e6':
            placeHolder = false;
            ret += 'a';
            break;
        case '\u00c4':
        case '\u00c1':
        case '\u00c0':
        case '\u00c2':
        case '\u00c3':
        case '\u00c5':
        case '\u00c6':
            placeHolder = false;
            ret += 'A';
            break;
        case '\u00f6':
        case '\u00f3':
        case '\u00f2':
        case '\u00f4':
        case '\u00f5':
        case '\u00f8':
            placeHolder = false;
            ret += 'o';
            break;
        case '\u00d6':
        case '\u00d3':
        case '\u00d2':
        case '\u00d4':
        case '\u00d5':
        case '\u00D6':
            placeHolder = false;
            ret += 'O';
            break;
        case '\u00fc':
        case '\u00fa':
        case '\u00f9':
        case '\u00fb':
        case '\u0169':
        case '\u0171':
            placeHolder = false;
            ret += 'u';
            break;
        case '\u00dc':
        case '\u00da':
        case '\u00d9':
        case '\u00db':
        case '\u0168':
            placeHolder = false;
            ret += 'U';
            break;
        case '\u00c8':
        case '\u00c9':
        case '\u00ca':
        case '\u00cb':
            placeHolder = false;
            ret += 'E';
            break;
        case '\u00e8':
        case '\u00e9':
        case '\u00ea':
        case '\u00eb':
            placeHolder = false;
            ret += 'e';
            break;
        case '\u00ec':
        case '\u00ed':
        case '\u00ee':
        case '\u00ef':
            placeHolder = false;
            ret += 'i';
            break;
        case '\u00dd':
        case '\u00a5':
            placeHolder = false;
            ret += 'Y';
            break;
        case '\u00c7':
            placeHolder = false;
            ret += 'C';
            break;
        case '\u00e7':
            placeHolder = false;
            ret += 'c';
            break;
        case '\u00fd':
        case '\u00ff':
            placeHolder = false;
            ret += 'y';
            break;
        case '\u00df':
            placeHolder = false;
            ret += 's';
            break;
        case '\u00f1':
            placeHolder = false;
            ret += 'n';
            break;
        case '\u00b2':
            placeHolder = false;
            ret += '2';
            break;
        case '\u00b3':
            placeHolder = false;
            ret += '3';
            break;

        // chars which are no problem just stay
        case '_':
            // make sure to print it only once
            if(!placeHolder) {
                ret += name.charAt(i);
                placeHolder = true;
            }
            break;

        default:
            var c = name.charAt(i);
            if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) {
                placeHolder = false;
                ret += c;
            } else {
                if (!placeHolder) {
                    ret += '_';
                    placeHolder = true;
                }
            }
        }
    }
    return ret;

#1楼 票数:0

更改这些行:

if(typeof name == 'undefined') {
    com.synckolab.global.consoleService.logStringMessage("undefined string " + new Error("s").stack);
}

到以下内容:

if(!name) {
    com.synckolab.global.consoleService.logStringMessage("undefined string " + new Error("s").stack);
    return;
}

这将检查未定义的空值和其他虚假值,这将使您的函数无法正常工作。

#2楼 票数:0 已采纳

乍一看,问题很简单:您正在检查参数的类型:如果未定义,则函数将无法运行。 但是在JS中,null并非未定义,并且undefined也不为空。

console.log(typeof null);//object!
console.log(null == undefined);//true
console.log(null === undefined);//false!

因此,可以通过检查所有虚假值来替换if(if( if(typeof name == 'undefined') ):

if(!name)
{
    //invalid argument: false, null, 0, '' and undefined
}
//valid args: true, '0', any number, other than 0, strings objects...

或者,在您的情况下可能更可取:检查是否有length属性可供使用

if (!name || !name.length)
{
    //invalid
}

检查输入是否为字符串:

if (typeof name === 'string')

  ask by user1514992 translate from so

未解决问题?本站智能推荐:

1回复

当其他文件正常工作时,document.getElementById返回null[关闭]

我在SO和整个网络上都看到过许多其他文章,但是这些文章涉及在创建元素之前尝试添加事件处理程序。 我的情况不一样。 我有一个具有以下部分的html文档: 我在页面加载后设置了一些事件处理程序,方法是调用: 在home.init()函数中,我设置了以下监听器: 所有其他侦听器处理程
3回复

如何确定Javascript数组中的字段为空还是null?

我的目标是确定名为name的字段是否为空。 我的代码返回此错误: “对象不是函数”。 解决此问题是因为我最初在if语句中使用的是(name)而不是[name] 更新了代码: if (namesArray(name) to if (namesArray[name]解决了错误。
3回复

如何设置document.getElementById(…)为null按摩为true

我的代码中包含更多document.getElementById,但是当我运行代码时,只有两个document.getElementById(ctx1,ctx2)获取其他值。 我如何才能使其他(在我的情况下为ctx3)返回true,而我却没有得到错误提示。 这是我的演示代码: DEMO
4回复

如何使用angularjs在视图中使用ng-if值检查null?

我有这种情况 但test.view== null不起作用,不仅检查test.view或test.view == '' 有任何想法吗? 谢谢编辑: 在循环中,有时test.view ,如果我这样做,有时值为 NULL: 我只会看到1
2回复

提交表单问题:TypeError:this.form为null

我有一个php页面,该页面在表格中显示给定站点的所有服务日志。 在表的最后,我有一个新行,其中有一个“添加新服务日志”按钮。 单击该按钮可隐藏该行,并显示具有表单和所需输入的新行以及具有“保存”和“取消”按钮的新行。 “保存”按钮调用Javascript函数,该函数检查键盘输入是否已
2回复

未捕获的TypeError,当目标字符串过长时,nullHTML会随机产生null错误

当尝试使用innerHTML来console.log带有comment类的p标签的内容时,出现此错误,前三个始终有效。 但这只是偶尔发生,看似随机。 我注意到的唯一模式是,当字符串不超过50个字符时,它始终有效。 Uncaught TypeError: Cannot read proper
3回复

TypeError为Null

我正在修复一个简单的用户输入多重复制表,该表已经出现错误。 我坚持使用一部分代码并且不明白它意味着什么。 当脚本在firbug中运行时,它说"TypeError: document.getElementById(...) is null" 这是附加到html的代码:
3回复

尝试在p5.js中调用多行字符串时出现TypeError

我一直在尝试制定一种解决方案,以采用单行句子(在我的代码中称为“语句”)并将其在我的草图上变成多行句子。 这个问题与我在SO上发布的另一个问题直接相关,因此我被要求将此新问题发布为新问题。 @KevinWorkman的解决方案使我明白了这一点。 不过,发生的是我遇到TypeError: C