Проверка, если не определено в JQuery / Javascript

0

У меня есть следующее:

var currentQuestion = $(this).closest(".question")

Я попробовал все, что было предложено в этом, этом и этом вопросе:

if(currentQuestion !== undefined)
if(currentQuestion !== "undefined")
if(typeof currentQuestion !== undefined)
if(typeof currentQuestion !== "undefined")
if(currentQuestion !== null)
if(currentQuestion != undefined)
if(currentQuestion != "undefined")
if(currentQuestion.data("index") !== null)
if(currentQuestion.data("index") !== undefined)
if(typeof currentQuestion.data("index") !== undefined)

Но он продолжает входить в утверждение if...

У меня есть это внутри if:

console.log("nextQ: " + currentQuestion.data("index"));

и nextQ: undefined получает распечатку

любые другие идеи?

РЕДАКТИРОВАТЬ:

currentQuestion.data("index") != null

Разработаны. Если вы проверите все параметры, которые я пробовал раньше, один из них аналогичен этому элементу сравнения !== и not !=. Это изменение изменило ситуацию. Если кто-то может объяснить, почему, я дам ему правильный ответ.

  • 2
    Вы пробовали длину ?
  • 1
    console.log(currentQuestion.data("index"), currentQuestion); PS: только примечание: настоящие инженеры по информатике не делают случайных вещей и ожидают, что они будут работать.
Показать ещё 3 комментария
Теги:

5 ответов

3

Результат никогда не будет неопределенным, это всегда объект jQuery. Если операция не обнаружила каких-либо элементов, объект jQuery будет пустым, поэтому вы проверите, сколько там элементов в нем, чтобы увидеть, если что-нибудь найдено:

if (currentQuestion.length > 0)

После того, как вы проверили, что на самом деле есть какой-либо элемент в объекте jQuery, вы можете проверить, есть ли какие-либо данные, связанные с этим элементом.

Если никакие данные не связаны с элементом, метод data будет возвращен undefined при попытке прочитать значение. Итак, чтобы проверить, нет ли данных, вы должны проверить тип значения, возвращаемого методом data:

if (typeof currentQuestion.data("index") != "undefined")
  • 0
    Это все еще входит в это решение
  • 1
    @marimaf: тогда происходит что-то еще, о чем вы нам не рассказали.
Показать ещё 2 комментария
1

Если вы хотите проверить, существуют ли какие-либо элементы, проверьте длину.

var currentQuestion = $(this).closest(".question");
if (currentQuestion.length > 0) {
    console.log("nextQ: " + currentQuestion.data("index"));
}
  • 0
    Я все еще получаю "nextQ: undefined" с вашим кодом
  • 0
    Возможно, у вас нет атрибута данных для этого селектора @marimaf. Может быть, вы можете проверить, if (currentQuestion.data('index'))
Показать ещё 1 комментарий
1
if (currentQuestion.length) {

Должен работать нормально. Если он туда попадет, он что-то нашел. И вместо того, чтобы смотреть на выражение if, вам нужно посмотреть на свой html и посмотреть, что он нашел.

  • 0
    Это все еще идет в :(
  • 0
    Что говорит о том, что найдено совпадение. Попробуйте console.log(currentQuestion) чтобы увидеть, что он соответствует.
Показать ещё 2 комментария
1

То, что вы хотите, это currentQuestion.length.

Селекторы jQuery возвращают массив элементов, соответствующих селектору. Чтобы проверить значения в массиве, вы должны использовать length:

Boolean([].length); //false

Поскольку 0 оценивается как false, вы можете просто использовать if (currentQuestion.length).

Если вы пытаетесь проверить его, когда оно ложно, используйте ! :

if (!currentQuestion.length)

Для вашего вопроса о том, почему != Работал, но нет !==, я бы предложил этот вопрос: Разница между == и === в JavaScript

В принципе, currentQuestion.data('index') не является строго равным null, но он может оценивать значение null: то же, что и [] == 0 значение true, но [] === 0 оценивается как false.

  • 0
    Я получаю длину 1 ... Я попытался currentQuestion.data ("index"). Длина, но затем я получаю ошибку, я не могу назвать длину неопределенной ...
  • 0
    Поскольку элемент существует, но у него нет атрибута данных. @marimaf Либо проверьте currentQuestion.length или currentQuestion.data('index')
Показать ещё 3 комментария
0

Это, вероятно, не самое элегантное решение. Но как-то

currentQuestion.data("index") != null

Разработаны. Если вы проверите все параметры, которые я пробовал раньше, наиболее похожим на этот был этот элемент сравнения !== и not !=. Это изменение изменило ситуацию. Если кто-то может объяснить, почему, я дам ему правильный ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню