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

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

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

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

Но это выдает ошибку:

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

Ошибка:

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

Ответ 1

Вы можете безопасно использовать оператор typeof для переменных undefined.

Если ему присвоено какое-либо значение, включая null, typeof вернет что-то, кроме undefined. typeof всегда возвращает строку.

Поэтому

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

Ответ 2

Здесь есть много полуправд, поэтому я подумал, что я делаю некоторые вещи более ясными.

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

Ответ 3

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

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

Ответ 4

Два пути.

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

Вы можете проверить локальный объект, используя typeof:

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

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

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

if (window.FormData) {}

Ответ 5

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

Ответ 6

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

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

Ответ 7

Я использовал только if(maybeObject) как нулевую проверку в моих javascripts.

if(maybeObject){
    alert("GOT HERE");
}

Поэтому, только если maybeObject - объект, будет показано предупреждение. У меня есть пример на моем сайте.

https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes

Ответ 8

Я только что протестировал примеры typeOf сверху, и ни один из них не работал для меня, поэтому вместо этого я использовал это:

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }

Ответ 9

Помимо проверки существования объекта/переменной вы можете захотеть предоставить вывод "наихудшего случая" или, по крайней мере, заманить его в предупреждение, чтобы он не остался незамеченным.

Пример функции, которая проверяет, предоставляет альтернативные и ловушки.

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 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 не существует.

Надеюсь, это поможет. (BTW, я новичок с JS)

Ответ 10

для меня это сработало для DOM-объекта:

if(document.getElementsById('IDname').length != 0 ){
   alert("object exist");
}

Ответ 11

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

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

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

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

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

Ответ 12

Тема была открыта довольно давно. Тем временем я думаю, что использование троичного оператора является самым простым вариантом:

maybeObject ? console.log(maybeObject.id) : ""

Ответ 13

if (n === Object(n)) {
   // code
}

Ответ 14

Если вы заботитесь только о его существовании (было ли оно объявлено?), Достаточно утвержденного ответа:

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

Если вас волнует фактическое значение, вы должны добавить:

if (typeof maybeObject != "undefined" && maybeObject != null ) {
   alert("GOT THERE");
}

Как typeof( null ) == "object"

например, bar = { x: 1, y: 2, z: null}

typeof( bar.z ) == "object" 
typeof( bar.not_present ) == "undefined" 

таким образом вы проверяете, что он не имеет null или undefined, и так как typeof не typeof ошибку, если значение не существует плюс && короткое замыкание, вы никогда не получите ошибку во время выполнения.

Лично я бы предложил добавить куда-нибудь помощник fn (и пусть не доверяет typeof()):

function exists(data){
   data !== null && data !== undefined
}

if( exists( maybeObject ) ){
    alert("Got here!"); 
}

Ответ 15

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

Ответ 16

установите значение текстового поля в один кадр для встроенного фрейма с помощью панели вкладок 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>

Ответ 17

ноль и ноль являются неявными указателями. Если вы не выполняете арифметику, сравниваете или выводите "0" на экран, нет необходимости его набирать. Это неявное. Как и подразумевается. Typeof также не требуется по той же причине. Часы.

if (obj) console.log("существует");

Я не видел запрос на нет или еще там, поскольку он не включен как. Столько, сколько я люблю дополнительный контент, который не вписывается в вопрос. Давайте будем проще.

Ответ 18

Думайте, что это проще всего

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

Ответ 19

Или вы можете начать использовать мой эксклюзивный метод exists() и сделать что-то невозможным. то есть:.

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