Винаги съм мислил, че евентуална промяна в получаването на неопределени стойности е да добавите оператор на разединение с 0 като втори елемент. Може би един пример е по-ясен:
Тук е цигулка.
$("textarea").val().match(/a/g).length || 0)
Бих очаквал горните да върнат времената a
се намира в textarea и когато не може да бъде намерено (и дължината връща undefined) да прескочи втората част на оператора OR, а именно 0
, Но както можете да видите това не работи. Конзолата се връща:
Uncaught TypeError: Не може да се прочете собственост "дължина" на нула
Така че, вместо неопределен, дължината хвърля грешка. Как мога да се справя най-добре с това. Как мога да го върна 0
когато няма мачове?
Отговори:
2 за отговор № 1match
се завръща null
когато не се намери съвпадение. Така че, когато напишете нещо в textarea
който не съдържа a
, match()
Ще се върне null
, И null.length
е грешка.
Стойност на връщането
Масив, съдържащ съчетаните резултати или нула ако няма съвпадения.
Демонстрация
$("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
0 за отговор № 2
Е, ако резултатът от .match
е null
, не се опитвайте да получите дължина!
var matches = $("textarea").val().match(/a/g);
var nummatches = matches && matches.length || 0;