/ / Чи невизначений результат до наступного елемента в операції OR? - jquery, regex, match, length-string

Чи невизначений результат до наступного елемента в операції OR? - jquery, regex, match, length-string

Я завжди думав, що резерв для отримання невизначених значень повинен був додати оператор диз'юнкції з 0 як другий елемент. Можливо, більш ясний приклад:

Ось а скрипка.

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

Я очікую, що вищезгадане поверне час a знаходиться в текстовій області, а коли вона може бути знайдена (і довжина повертається невизначеною), щоб перейти до другої частини оператора OR, 0. Але, як ви бачите, це не працює. Консоль повертається:

Uncaught TypeError: Неможливо прочитати властивість "length" null

Так, а не невизначено, довжина кидає помилку. Як я можу впоратися з цим найкращим чином. Як я можу це повернути 0 коли немає збігів?

Відповіді:

2 для відповіді № 1

match повертає 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;