Проверьте, существует ли объект в 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] и тип x.m[z] потерпит неудачу с ошибкой, если x.м не существует.
надеюсь, это поможет. (Кстати, я новичок с 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");
думаю, это проще всего, как это
if(myobject_or_myvar)
alert('it exists');
else
alert("what the hell you'll talking about");
или вы все можете начать использовать мой эксклюзив () метод вместо этого и быть в состоянии делать вещи, считающиеся невозможными. т. е.:
такие вещи, как: exists("blabla")
, или даже: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
также возможно...