У меня есть следующее:
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 !=
. Это изменение изменило ситуацию. Если кто-то может объяснить, почему, я дам ему правильный ответ.
Результат никогда не будет неопределенным, это всегда объект jQuery. Если операция не обнаружила каких-либо элементов, объект jQuery будет пустым, поэтому вы проверите, сколько там элементов в нем, чтобы увидеть, если что-нибудь найдено:
if (currentQuestion.length > 0)
После того, как вы проверили, что на самом деле есть какой-либо элемент в объекте jQuery, вы можете проверить, есть ли какие-либо данные, связанные с этим элементом.
Если никакие данные не связаны с элементом, метод data
будет возвращен undefined
при попытке прочитать значение. Итак, чтобы проверить, нет ли данных, вы должны проверить тип значения, возвращаемого методом data
:
if (typeof currentQuestion.data("index") != "undefined")
Если вы хотите проверить, существуют ли какие-либо элементы, проверьте длину.
var currentQuestion = $(this).closest(".question");
if (currentQuestion.length > 0) {
console.log("nextQ: " + currentQuestion.data("index"));
}
if (currentQuestion.data('index'))
if (currentQuestion.length) {
Должен работать нормально. Если он туда попадет, он что-то нашел. И вместо того, чтобы смотреть на выражение if, вам нужно посмотреть на свой html и посмотреть, что он нашел.
console.log(currentQuestion)
чтобы увидеть, что он соответствует.
То, что вы хотите, это 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
.
currentQuestion.length
или currentQuestion.data('index')
Это, вероятно, не самое элегантное решение. Но как-то
currentQuestion.data("index") != null
Разработаны. Если вы проверите все параметры, которые я пробовал раньше, наиболее похожим на этот был этот элемент сравнения !==
и not !=
. Это изменение изменило ситуацию. Если кто-то может объяснить, почему, я дам ему правильный ответ.
console.log(currentQuestion.data("index"), currentQuestion);
PS: только примечание: настоящие инженеры по информатике не делают случайных вещей и ожидают, что они будут работать.