无法在javascript for循环中读取null的属性’length’

我正在尝试制作像Stack Overflow这样的降价编辑器。

如果我实际上没有在textarea中键入星号和包含短语的http://,我会在标题中列出此错误。 如果我只输入包含短语的星号,则错误引用此行: if(linkify.length!==0)

这是一个向您展示我的意思的jsfiddle 。

这是我的HTML:

  

这是我的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, ''+boldMatch+''), 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, ''+italicMatch+''); 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, ''+linkMatch+''); val = val.replace(linkMatch, linkReplace); } } $('div').html(val); }); 

任何帮助将不胜感激。

如果字符串与提供的正则表达式不匹配,则使用返回null的match函数,而不是使用返回true / false的test函数,然后如果需要,可以使用match函数。

基本上你执行null.length这显然是无效的,因为match返回null

或者你可以在检查长度之前执行null检查,然后只进行一次正则表达式匹配。

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

如果文本中没有’http://’匹配,’linkify’为null,因此您需要测试该条件:

 if(linkify && linkify.length)