Проверьте, существует ли объект в JavaScript - PullRequest
281 голосов
/ 15 ноября 2010

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

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

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

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

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

Ошибка:

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

Ответы [ 18 ]

528 голосов
/ 15 ноября 2010

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

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

Следовательно

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}
45 голосов
/ 15 ноября 2010

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

На самом деле вы не можете точно определить, существует ли переменная (если вы не хотите обернуть каждую вторую строку вблок try-catch).

Причина в том, что Javascript имеет пресловутое значение undefined, что поразительно не означает, что переменная не определена или что она не существует undefined !== not defined

var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)

Так что и переменная, которая существует, и другая, которая не может сообщить вам тип undefined.

Что касается заблуждения @ Кевина, null == undefined.Это происходит из-за приведения типов, и это главная причина, по которой Крокфорд постоянно говорит всем, кто не уверен в подобных вещах, всегда использовать оператор строгого равенства === для проверки возможных ложных значений.null !== undefined дает вам то, что вы могли ожидать.Также обратите внимание, что foo != null может быть эффективным способом проверки, является ли переменная ни undefined, ни null.Конечно, вы можете быть явным, потому что это может помочь читабельности.

Если вы ограничите вопрос проверкой существования объекта, typeof o == "object" может быть хорошей идеей, за исключением случаев, когда вы не рассматриваете объекты массивов,также сообщается, что это тип object, который может немного запутать вас.Не говоря уже о том, что typeof null также даст вам object, что просто неправильно.

Первичная область, где вы действительно должны быть осторожны с typeof, undefined, null, unknownи другие тайны являются объектами хозяина.Им нельзя доверять.Они свободны делать почти любую грязную вещь, которую хотят.Поэтому будьте осторожны с ними, по возможности проверяйте их функциональность, потому что это единственный безопасный способ использовать функцию, которая может даже не существовать.

11 голосов
/ 15 ноября 2010

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

if (typeof objectName == 'object') {
    //do something
}
7 голосов
/ 31 октября 2013

Два пути.

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

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

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

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

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

if (window.FormData) {}
6 голосов
/ 15 ноября 2010

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

4 голосов
/ 15 ноября 2010

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

if(typeof maybeObject != "undefined")
    alert("GOT HERE");
4 голосов
/ 19 ноября 2010

Раньше я просто делал if(maybeObject) в качестве нулевой проверки в моих JavaScript.

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

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

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

3 голосов
/ 28 апреля 2015

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

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd != null) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }
1 голос
/ 04 января 2018

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

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

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

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

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

1 голос
/ 14 августа 2017

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

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