无法读取空的特性“长”在javascript for循环(Cannot read property

2019-09-16 14:39发布

我试图做一个降价编辑器,如堆栈溢出。

我得到的标题上市,如果我不实际键入星号和HTTP这样的错误://词组,它包含了textarea的。 如果我只输入一个包含短语星号,误差是指这条线: if(linkify.length!==0)

这里有一个的jsfiddle向你展示我的意思。

这里是我的HTML:

<textarea></textarea>
<div></div><button type="button">Markdownify</button>

这里是我的JS:

var val=$('textarea').val(), boldify = val.match(/\*\*[A-Za-z0-9]+\*\*/gim),
italicify = val.match(/\*[A-Za-z0-9]+\*/gim),linkify = val.match(/http\:\/\/[A-z0-9]+\.[A-z0-9]+/gim);

$(document.body).on('click', 'button', function() {

val=$('textarea').val(), boldify = val.match(/\*\*[A-Za-z0-9]+\*\*/gim),
italicify = val.match(/\*[A-Za-z0-9]+\*/gim),linkify = val.match(/http\:\/\/[A-z0-9]+\.[A-z0-9]+/gim);

if (boldify.length!== 0){
            for (var i=0; i < boldify.length; i++)  {
                var boldMatch= boldify[i],  
                boldReplace = boldMatch.replace(/\*\*[A-z0-9]+\*\*/gim, '<span style="font-weight:bold;color:blue;">'+boldMatch+'</span>'),
                val = val.replace(boldMatch, boldReplace);     
            }
        val = val.replace(/\*\*/gi, "");
}

if(italicify.length!== 0){
    for(var j=0; j < italicify.length; j++){
    var italicMatch= italicify[j],
     italicReplace = italicMatch.replace(/\*[A-z0-9]+\*/gim, '<span style="font-style:italic;color:red;">'+italicMatch+'</span>');
    val = val.replace(italicMatch, italicReplace); 
    }
    val = val.replace(/\*/gi, "");
}

if(linkify.length!== 0){
    for(var k=0; k < linkify.length; k++){
    var linkMatch= linkify[k],
    linkReplace = linkMatch.replace(/http:\/\/[A-z0-9]+\.[A-z0-9]+/gim, '<a href="'+linkMatch+'">'+linkMatch+'</a>');
        val = val.replace(linkMatch, linkReplace);
    }
}

$('div').html(val);
});

任何帮助将不胜感激。

Answer 1:

而不是使用match函数返回一个空字符串是否犯规匹配提供正则表达式使用test函数返回一个真/假,然后,如果你需要它,你可以使用match功能。

基本上你正在执行null.length这是因为显然无效match是你返回一个空

或者你可以只执行null您检查长度之前,只是做的正则表达式匹配一次检查。

if(linkify!==null && linkify.length!== 0)
{
  //do smthing
}


Answer 2:

“linkify”为空时,没有一个的“http://”匹配的文本,所以你需要测试该条件:

if(linkify && linkify.length)


文章来源: Cannot read property 'length' of null in javascript for loop