处理返回null的情况Javascript

时间:2016-05-22 11:46:02

标签: javascript

我试图计算句子中句号的数量。当句子中有句号时,此代码可以正常工作。但是,如果没有句号,我会收到一条错误消息Cannot read property 'length' of null

编写代码以处理此错误的最佳方法是什么,并将0显示为用户的完整停止数。

See js fiddle here for the example

JS

$(".calculate").click(function() {
var input = $(".text-input").val();
var fullStopCount = 0;
   fullStopCount = input.match(new RegExp("\\.", "g")).length;
   $(".fullstop-count").text(". = " + fullStopCount);

});

HTML

<div class="textarea-holder">
  <textarea class="text-input" name="textarea" rows="5" cols="30">This sentence contains one fullstop.</textarea>
</div>
<button class="calculate">Calculate</button>
<p class="fullstop-count"></p>

4 个答案:

答案 0 :(得分:2)

只需制作另一个if(本例中为三元组)来检查收到的结果:

var fullStops = input.match(new RegExp("\\.", "g"));
var fullStopsCount = fullStops ? fullStops.length : 0;
$(".fullstop-count").text(". = " + fullStopCount);

答案 1 :(得分:1)

根据文档,如果未找到匹配项 match() ,则返回SELECT st_index, (case when subject='Maths' then marks end )as 'Maths', (case when subject='Science' then marks end )as 'Science' FROM tbl_marks where term=1 group by st_index ,在这种情况下,您无法获得null length的属性1}}。

此外,您可以使用null代替/\./g,因为它已经是正则表达式对象,因此速度会快得多。

&#13;
&#13;
new RegExp("\\.", "g")
&#13;
$(".calculate").click(function() {
  var input = $(".text-input").val();
  var fullStopCount = 0;
  // if match() returns null ( which is falsy value) returns [] 0therwise the matched array
  fullStopCount = (input.match(/\./g) || []).length;
  $(".fullstop-count").text(". = " + fullStopCount);
});
&#13;
&#13;
&#13;

FYI : 有关short-circuit evaluation of logical operator is here的更多信息。

答案 2 :(得分:0)

尝试先检查变量是否为空以避免错误

if (input.match(new RegExp("\\.", "g")) != null) {
  // check the length...
}

答案 3 :(得分:0)

如果没有'。'在文本中,input.match(new RegExp("\\.", "g"))将返回null。只有在至少有一个完整停止时才应使用.length,否则你知道没有

$(".calculate").click(function() {
var input = $(".text-input").val();
var fullStopCount = 0;
   fullStopReg = input.match(new RegExp("\\.", "g"));
   if(fullStopReg == null){
       $(".fullstop-count").text(". = 0");
   }
   else{
      fullStopCount = fullStopReg.length;
   		$(".fullstop-count").text(". = " + fullStopCount);
   }
   

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="textarea-holder">
  <textarea class="text-input" name="textarea" rows="5" cols="30">This sentence contains one fullstop.</textarea>
</div>
<button class="calculate">Calculate</button>
<p class="fullstop-count"></p>