Длина JavaScript не определена или ноль
Я пытаюсь написать функцию Javascript, которая возвращает один элемент с указанным именем. Я нашел этот вопрос и изменил ответ, чтобы использовать троичный оператор.
function getField(fieldName)
{
var elements = document.getElementsByName(fieldName);
return elements.length && elements.legth > 0 ? elements[0] : null;
}
Мой вопрос о том случае, когда document.getElementsByName(fieldName)
не находит совпадений. Это возвращает undefined
или же 0
? Когда я вывожу elements.length
в качестве предупреждающего сообщения значение в оповещении 0
но на консоли Chrome DevTools написано undefined
, Когда я звоню console.log(elements.length)
из консоли выводит 0
а также undefined
,
Я знаю, что моя функция обрабатывает оба случая, но чего мне здесь не хватает? Что на самом деле делает Javascript?
Заранее спасибо, что помогли мне понять это.
РЕДАКТИРОВАТЬ: Извините за размещение изображения вместо фактического кода и спасибо за разъяснение синтаксиса.
3 ответа
Как ваш вопрос, кажется, что document.getElementsByName
возвращается, когда он не найден, это будет пустой NodeList с длиной 0 (поэтому не является неопределенным)
Поэтому проще всего было бы то, что Дандевис предложил в своем комментарии просто вернуть первый элемент списка узлов. Если он пуст, он будет неопределенным, если нет, то это будет первый элемент (хотя не уверен, что это всегда соответствует вашему случаю)
так что ваша функция может быть
function getFieldAt(fieldName, index = 0) {
return document.getElementsByName(fieldName)[index];
}
если вы не используете необязательные параметры, вы можете изменить его на
function getFieldAt(fieldName, index) {
return document.getElementsByName(fieldName)[index || 0];
}
Ваше недопонимание относительно devtools подробно объяснено в комментариях, а также в другом ответе:)
elements.length
равно 0 в вашем случае.
Ваше понимание console.log
вводит в заблуждение:
console.log (elements.length); > elements.length печатается. Он оценивается в 0, поэтому 0 печатается > console.log(elements.length). Значение оценивается как неопределенное, поэтому выводится неопределенное.
Нет необходимости проверять значение длины, просто используйте:
function getField(fieldName)
{
let elements = document.getElementsByName(fieldName);
return (elements[0]) ? elements[0] : null;
}
console.log( getField('div-A') );
console.log( getField('neverExist') );
<div name="div-A"> div-A 1 </div>
<div name="div-A"> div-A 2 </div>
<div name="div-A"> div-A 3 </div>