undefined 是否导致 OR 操作中的下一项?

Does undefined lead to the next item in OR operation?

我一直认为获取未定义值的后备方法是添加一个以 0 作为第二个元素的析取运算符。也许一个例子更清楚:

这是 fiddle

$("textarea").val().match(/a/g).length || 0)

我希望上面的 return 次 a 在 textarea 中找到,当找不到时(并且长度 returns 未定义)跳过到 OR 语句的第二部分,即 0。但如您所见,这是行不通的。控制台 returns:

Uncaught TypeError: Cannot read property 'length' of null

所以 length 不是 undefined,而是抛出错误。我怎样才能最好地处理这件事。当没有匹配项时,我怎样才能做到 return 0

match returns null 未找到匹配项时。因此,当您在 textarea 中键入不包含 a 的内容时,match() 将 return nullnull.length 是错误的。

Return value

An Array containing the matched results or null if there were no matches.

演示

$("textarea").on("input", function() {
  console.log(($("textarea").val().match(/a/g) || []).length);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<textarea></textarea>

Demo

您也可以使用

($("textarea").val().match(/a/g) || '').length // Thanks to @nnnnnn

Demo

好吧,如果 .match 的结果是 null,请不要尝试获取它的长度!

var matches = $("textarea").val().match(/a/g);
var nummatches = matches && matches.length || 0;