#javascript #logic
#javascript #Логические
Вопрос:
В настоящее время у меня есть оператор if, который проверяет, является ли цель нулевой, и если цель не равна нулю, то для проверки, не является ли цель «select …». Если это не null и ‘select …’, то я хочу, чтобы он выполнил код. Когда я запускаю этот код, он всегда пропускает первую строку тела оператора if и переходит ко второй строке. Я не понимаю, почему. В этом случае он всегда переходит к targetValue = getTargetValue();
if (target != null amp;amp; !(target.lastIndexOf('select... ', 0) === 0))
{
permalink.href = "amp;Target=" target;
targetValue = getTargetValue();
}
Я не уверен, есть ли у меня логическая ошибка или нет. Я использую отладчик firefox, и я прошел через этот код.
Комментарии:
1. Может быть, если вы сделали это: if ((target != null) amp;amp; …
2. @Dean. Сравнения по умолчанию имеют более высокий приоритет, чем логические операторы, это не проблема.
3. В написанном вами коде невозможно
permaline.href...
пропустить строку иtargetValue = ...
выполнить строку. Все, что происходит в вашем коде, выглядит только так. Вif
операторе либо выполняется все тело, либо не выполняется. Добавьте предупреждение илиconsole.log
что-нибудь еще, чтобы определить значения ваших выражений и отслеживать выполнение.4. Нет причин, по которым он должен пропускать первый оператор тела. Он либо выполняет все тело, либо ничего из него.
Ответ №1:
Возможно, проблема связана с lastIndexOf, поскольку он выполняет поиск в обратном направлении от заданного индекса. Итак, в вашем случае вы дали ему 0, что определенно вернет -1
Метод lastIndexOf() возвращает последний индекс, по которому данный элемент может быть найден в массиве, или -1, если он отсутствует. Поиск в массиве выполняется в обратном направлении, начиная с fromIndex .
Попробуйте это без каких-либо аргументов
if (target != null amp;amp; !(target.lastIndexOf('select... ') === 0))
{
permalink.href = "amp;Target=" target;
targetValue = getTargetValue();
}