Проверьте, существует ли объект в JavaScript
Как проверить существование объекта в JavaScript?
следующие работы:
if (!null)
alert("GOT HERE");
но это вызывает ошибку:
if (!maybeObject)
alert("GOT HERE");
Ошибки:
maybeObject
не определен.
16 ответов:
Вы можете безопасно использовать
typeof
оператор для неопределенных переменных.если ему было присвоено какое-либо значение, включая null, typeof вернет что-то другое, кроме undefined. typeof всегда возвращает строку.
if (typeof maybeObject != "undefined") { alert("GOT THERE"); }
здесь много полуправды, поэтому я подумал, что проясняю некоторые вещи.
на самом деле вы не можете точно сказать, существует ли переменная (если вы не хотите обернуть каждую вторую строку в блок try-catch).
причина в том, что Javascript имеет это пресловутое значение
undefined
что поразительно, не означает, что переменная не определена, или не существуетundefined !== not defined
var a; alert(typeof a); // undefined (declared without a value) alert(typeof b); // undefined (not declared)
Итак, как переменная, которая существует, так и другая, которая не может сообщить вам
undefined
тип.что касается заблуждения @Kevin,
null == undefined
. Это связано с принуждением типа, и это главная причина, по которой Крокфорд продолжает говорить всем, кто не уверен в этом, всегда использовать строгий оператор равенства===
для проверки возможных ложных значений.null !== undefined
дает вам то, что вы могли бы ожидать. Обратите внимание, чтоfoo != null
может быть эффективным способом проверить, не является ли переменная ниundefined
, ниnull
. Конечно, вы можете быть явным, потому что это может помочь удобочитаемости.если вы ограничиваете вопрос, чтобы проверить, существует ли объект,
typeof o == "object"
может быть хорошей идеей, за исключением тех случаев, когда вы не рассматриваете объекты массивов, так как это также будет указано как типobject
что может оставить вас немного запутался. Не говоря уже о том, чтоtypeof null
также даст вамobject
это просто неправильно.первичная область, где вы действительно должны быть осторожны
typeof
,undefined
,null
,unknown
и другие тайны размещения объектов. Им нельзя доверять. Они вольны делать почти любую грязную вещь, которую они хотят. Поэтому будьте осторожны с ними, проверьте функциональность, если можете, потому что это единственный безопасный способ использовать функцию, которая может даже не существовать.
двумя способами.
typeof для локальных переменных
Вы можете проверить локальный объект с помощью оператора typeof:
if (object !== "undefined") {}
окно глобальных переменных
вы можете проверить глобальный объект (определенный в глобальной области видимости), проверив объект window:
if (window.FormData) {}
раньше я просто делал
if(maybeObject)
как нулевая проверка в моих javascripts.if(maybeObject){ alert("GOT HERE"); }
Так, только если
maybeObject
- это объект, предупреждение будет показано. У меня есть пример на моем сайте.https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
Я только что протестировал примеры typeOf сверху, и никто не работал для меня, поэтому вместо этого я использовал это:
btnAdd = document.getElementById("elementNotLoadedYet"); if (btnAdd != null) { btnAdd.textContent = "Some text here"; } else { alert("not detected!"); }
помимо проверки существования объекта / переменной вы можете предоставить вывод "наихудшего случая" или, по крайней мере, поймать его в предупреждение, чтобы он не остался незамеченным.
пример функции, которая проверяет, предоставляет альтернативу и ловит ошибки.
function fillForm(obj) { try { var output; output = (typeof obj !== 'undefined') ? obj : ''; return (output); } catch (err) { // If an error was thrown, sent it as an alert // to help with debugging any problems alert(err.toString()); // If the obj doesn't exist or it's empty // I want to fill the form with "" return (''); } // catch End } // fillForm End
Я создал это также потому , что объект , который я передавал ему, может быть x, x.m, x.m[z] и typeof x.m[z] потерпит неудачу с ошибкой, если x.m не существует.
Я надеюсь, что это помогает. (Кстати, я новичок с JS)
установите значение текстового поля в один кадр для встроенного кадра с помощью панели с вкладками div alignmnt. Поэтому прежде всего, прежде чем установить значение, нам нужно проверить выбранную рамку панелей с вкладками, доступную или нет, используя следующие коды:
Javascript Код:
///////////////////////////////////////// <script> function set_TextID() { try { if(!parent.frames["entry"]) { alert("Frame object not found"); } else { var setText=document.getElementById("formx").value; parent.frames["entry"].document.getElementById("form_id").value=setText; } if(!parent.frames["education"]) { alert("Frame object not found"); } else { var setText=document.getElementById("formx").value; parent.frames["education"].document.getElementById("form_id").value=setText; } if(!parent.frames["contact"]) { alert("Frame object not found"); } else { var setText=document.getElementById("formx").value; parent.frames["contact"].document.getElementById("form_id").value=setText; } }catch(exception){} } </script>
для меня это работает:
if(document.getElementsByClassName("classname").length != 0 ){ alert("classname exist"); }
можно использовать
!
оператор в два раза!!
:if (!!maybeObject) alert("maybeObject exists");
и один раз
!
не существует:if (!maybeObject) alert("maybeObject does not exist");