Проверьте, существует ли объект в JavaScript


Как проверить существование объекта в JavaScript?

следующие работы:

if (!null)
   alert("GOT HERE");

но это вызывает ошибку:

if (!maybeObject)
   alert("GOT HERE");

Ошибки:

maybeObject не определен.

16 253

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 и другие тайны размещения объектов. Им нельзя доверять. Они вольны делать почти любую грязную вещь, которую они хотят. Поэтому будьте осторожны с ними, проверьте функциональность, если можете, потому что это единственный безопасный способ использовать функцию, которая может даже не существовать.

вы можете использовать:

if (typeof objectName == 'object') {
    //do something
}

двумя способами.

typeof для локальных переменных

Вы можете проверить локальный объект с помощью оператора typeof:

if (object !== "undefined") {}

окно глобальных переменных

вы можете проверить глобальный объект (определенный в глобальной области видимости), проверив объект window:

if (window.FormData) {}

Если это глобальный объект, вы можете использовать if (!window.maybeObject)

вы можете использовать "typeof".

if(typeof maybeObject != "undefined")
    alert("GOT HERE");

раньше я просто делал 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 (n === Object(n)) {
   // code
}

для меня это работает:

if(document.getElementsByClassName("classname").length != 0 ){
   alert("classname exist");
}

можно использовать ! оператор в два раза !!:

if (!!maybeObject)
  alert("maybeObject exists");

и один раз ! не существует:

if (!maybeObject)
  alert("maybeObject does not exist");

что такое !! (не) оператор в JavaScript?

if (maybeObject !== undefined)
  alert("Got here!");

думаю, что это проще всего, как это

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");

или, вы все можете начать использовать мой эксклюзив () метод вместо этого и быть в состоянии сделать то, что считается невозможным. т. е.:

такие вещи, как: exists("blabla"), или даже: exists("foreignObject.guessedProperty.guessNext.propertyNeeded") также возможно...