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 null
。 null.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>
您也可以使用
($("textarea").val().match(/a/g) || '').length // Thanks to @nnnnnn
好吧,如果 .match
的结果是 null
,请不要尝试获取它的长度!
var matches = $("textarea").val().match(/a/g);
var nummatches = matches && matches.length || 0;
我一直认为获取未定义值的后备方法是添加一个以 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 null
。 null.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>
您也可以使用
($("textarea").val().match(/a/g) || '').length // Thanks to @nnnnnn
好吧,如果 .match
的结果是 null
,请不要尝试获取它的长度!
var matches = $("textarea").val().match(/a/g);
var nummatches = matches && matches.length || 0;