/ / Неопределено ли води до следващия елемент в операция "ИЛИ"? - jquery, regex, match, string-length

Неопределено ли води до следващата точка в операция "ИЛИ"? - jquery, regex, match, string-length

Винаги съм мислил, че евентуална промяна в получаването на неопределени стойности е да добавите оператор на разединение с 0 като втори елемент. Може би един пример е по-ясен:

Тук е цигулка.

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

Бих очаквал горните да върнат времената a се намира в textarea и когато не може да бъде намерено (и дължината връща undefined) да прескочи втората част на оператора OR, а именно 0, Но както можете да видите това не работи. Конзолата се връща:

Uncaught TypeError: Не може да се прочете собственост "дължина" на нула

Така че, вместо неопределен, дължината хвърля грешка. Как мога да се справя най-добре с това. Как мога да го върна 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;