Я завжди думав, що резерв для отримання невизначених значень повинен був додати оператор диз'юнкції з 0 як другий елемент. Можливо, більш ясний приклад:
Ось а скрипка.
$("textarea").val().match(/a/g).length || 0)
Я очікую, що вищезгадане поверне час a
знаходиться в текстовій області, а коли вона може бути знайдена (і довжина повертається невизначеною), щоб перейти до другої частини оператора OR, 0
. Але, як ви бачите, це не працює. Консоль повертається:
Uncaught TypeError: Неможливо прочитати властивість "length" null
Так, а не невизначено, довжина кидає помилку. Як я можу впоратися з цим найкращим чином. Як я можу це повернути 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;