javascript — Как проверить существует ли объект
Вопрос задан
Изменён 11 лет 3 месяца назад
Просмотрен 20k раз
Как проверить существует ли глобальный объект? Есть код:
function foo() { GlobalObj.doSome() }
Надо узнать, существует ли объект. Как я понял, в итоге должно получиться нечто подобное:
function foo() { ifdef (GlobalObj) { GlobalObj.doSome() } }
Есть ли разница между
if (GlobalObj != undefined) {...}
и
if (typeof GlobalObj != 'undefined') {...}
Можно ли просто использовать блок try/catch
?
- javascript
if (typeof GlobalObj !== "undefined" && GlobalObj !== null) {.[ undefined ]
1
Можете использовать проверку на undefined:
if (GlobalObj != undefined) {...}1
В определенных случаях есть смысл жестко указать на то что ищем именно глобальную переменную:
window.GlobalObj
И в данном случае проверка может быть:if(!window.GlobalObj){...}
(если быть уверенным точно чтоwindow.GlobalObj !== false
)Разница между
if (GlobalObj != undefined) {...}и
if (typeof GlobalObj != 'undefined') {...}существует 🙂 Если
typeof GlobalObj == 'undefined'
, то в первом случае выбросится ошибка:ReferenceError: GlobalObj is not defined
Зарегистрируйтесь или войдите
Регистрация через GoogleРегистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Проверить наличие переменных в PHP / JS > VielhuberДэвид
При ежедневной работе с переменными в PHP и JavaScript часто возникает вопрос, является ли переменная пустой.
Для проверки полезно знать собственные функции и их различия. К сожалению, нет простого способа интуитивно проверить, присутствует ли переменная или нет. Приведенная ниже матрица иллюстрирует, что под этим подразумевается. Однако то, что вы хотите, можно дополнить небольшими вспомогательными функциями.
PHP
=== null | == null | is_null | isset | empty | if/else | ternary | count > 0 | == '' | === '' | @__x | |
$a | true | true | true | false | true | false | false | false | true | false | false |
null | true | true | true | false | true | false | false | false | true | false | false |
[] | false | true | false | true | true | false | false | false | false | false | false |
0 | false | true | false | true | true | false | false | true | true | false | true |
1 | false | false | false | true | false | true | true | true | false | false | true |
-1 | false | false | false | true | false | true | true | true | false | false | true |
'' | false | true | false | true | true | false | false | true | true | true | false |
' ' | false | false | false | true | false | true | true | true | false | false | false |
str | false | false | false | true | false | true | true | true | false | false | true |
[0,1] | false | false | false | true | false | true | true | true | false | false | true |
[0] | false | false | false | true | false | true | true | true | false | false | true |
new stdClass() | false | false | false | true | false | true | true | true | false | false | false |
Реализация __x:
php">740550c6b3d2b9ae03e4d220eb08e6e3Вспомогательная функция __x вызывается с оператором контроля ошибок @, что обычно не рекомендуется, чтобы также иметь возможность проверять ранее неопределенные переменные.
JavaScript
=== null | == null | typeof input === 'undefined' | if/else | ternary | length > 0 | == '' | === '' | __x | |
$a | false | true | true | false | false | type error | false | false | false |
null | true | true | false | false | false | type error | false | false | false |
[] | false | false | false | true | true | false | true | false | false |
0 | false | false | false | false | false | false | true | false | true |
1 | false | false | false | true | true | false | false | false | true |
-1 | false | false | false | true | true | false | false | false | true |
'' | false | false | false | false | false | false | true | true | false |
' ' | false | false | false | true | true | true | false | false | false |
str | false | false | false | true | true | true | false | false | true |
[0,1] | false | false | false | true | true | true | false | false | true |
[0] | false | false | false | true | true | true | false | false | true |
new Object() | false | false | false | true | true | false | false | false | false |
Реализация __x:
js">740550c6b3d2b9ae03e4d220eb08e6e3Назад
Проверка наличия переменной в javascript
спросил
Изменено 1 год, 9 месяцев назад
Просмотрено 148 тысяч раз
Я знаю, что есть два метода, чтобы определить, существует ли переменная, а не null (false, empty) в javascript:
1) if ( typeof variableName !== 'undefined' && variableName )
2) if ( window.variableName )
какой из них предпочтительнее и почему?
- JavaScript
4
Переменная объявлена как , если доступ к имени переменной не приведет к ошибке ReferenceError
. Выражение
typeof variableName !== 'undefined'
false
только в одном из двух случаев:- переменная не объявлена (т.е. в области видимости нет
var variableName
), или - переменная объявлена и ее значение равно
undefined
(т. е. значение переменной равно не определено )
В противном случае сравнение оценивается как true
.
Если вы действительно хотите проверить, объявлена ли переменная или нет, вам нужно поймать
любые ReferenceError
, вызванная попытками сослаться на него:
var barIsDeclared = true; попробуйте {бар; } поймать (е) { если (e.name == "ReferenceError") { barIsDeclared = ложь; } }
Если вы просто хотите проверить, является ли значение объявленной переменной ни undefined
, ни null
, вы можете просто проверить это:
if (variableName !== undefined && variableName !== null) { ... }
Или, что то же самое, с нестрогой проверкой на равенство null
:
if (variableName != null) { ... }
И ваш второй пример, и ваше правое выражение в операции &&
проверяют, является ли значение «ложным», т. е. приводит ли оно к ложному
в логическом контексте. Такие значения включают null
, false
, 0
и пустую строку, не все из которых вы можете отбросить.
6
Важно отметить, что 'undefined' является вполне допустимым значением для хранения переменной. Если вы хотите проверить, существует ли переменная вообще,
если (window.variableName)
является более полной проверкой, так как проверяет, действительно ли переменная была определена. Однако это полезно только в том случае, если переменная гарантированно является объектом! Кроме того, как указывали другие, это также может возвращать false, если значение variableName равно false, 0, '' или null.
Тем не менее, этого обычно недостаточно для наших повседневных целей, поскольку мы часто не хотим иметь неопределенное значение. Таким образом, вы должны сначала проверить, определена ли переменная, а затем подтвердить, что она не является неопределенной, используя оператор typeof, который, как указал Адам, не вернет значение undefined, если переменная действительно не определена.
если (имя_переменной && typeof имя_переменной !== 'undefined')
5
Если вы хотите проверить, определена ли переменная (например, v) и не является ли она нулевой:
if (typeof v !== 'undefined' && v !== null) { // Делаем какую-то операцию }
Если вы хотите проверить все ложные значения, такие как: undefined
, null
, ''
, 0
, false
:
если (v) { // Делаем какую-то операцию }
Пишу ответ только потому, что мне не хватает репутации, чтобы прокомментировать принятый ответ от апсилеров . Я согласен с его ответом, но
Если вы действительно хотите проверить, не объявлена ли переменная, вам нужно поймать ReferenceError...
не единственный способ. Можно сделать просто:
this.hasOwnProperty("bar")
для проверки наличия переменной бар объявлен в текущем контексте. (Я не уверен, но вызов hasOwnProperty также может быть более быстрым/эффективным, чем создание исключения) Это работает только для текущего контекста (не для всей текущей области).
2
если ( typeof имя_переменной !== 'undefined' && имя_переменной ) //// может выдать ошибку, если var вообще не существует если (окно.имя_переменной) //// может быть правдой, если var == 0 ////дальше зависит от того, что хранится в этой переменной // если вы ожидаете, что объект будет храниться в этой переменной, возможно если ( !!окно.имя_переменной ) // может быть правильным способом лучший способ => посмотреть, что работает для вашего случая
0
Я нашел это короче и намного лучше:
if(varName !== (undefined || null)) { // сделать что-то }
1
, если (переменная)
может использоваться, если переменная гарантированно является объектом, или если false, 0 и т. д. считаются значениями «по умолчанию» (следовательно, эквивалентными неопределенным или нулевым).
typeof переменная == 'undefined'
можно использовать в тех случаях, когда указанный нуль имеет особое значение для неинициализированной переменной или свойства. Эта проверка не выдаст ошибку, и переменная не объявлена.
Вы можете просто сделать if(variableName){console.log("Переменная существует")}
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Решено: проверить, существует ли переменная в JavaScript
Основная проблема с проверкой существования переменной заключается в том, что она может быть медленной.
если (переменная типа !== 'undefined') { // переменная определена }
Первая строка — оператор if. Он проверяет, не равен ли тип переменной «undefined». Если это не так, то он запускает код внутри фигурных скобок. Этот код просто выводит сообщение о том, что переменная определена.
Содержимое
- 1 Метод If Exist
- 2 Переменные и циклы
Метод If Exists
Метод IfExists — это встроенная функция в JavaScript, которая проверяет, выполняется ли заданное условие. Если это так, функция возвращает значение; в противном случае возвращается ноль.
переменные и циклы
В JavaScript переменные объявляются с помощью ключевого слова var, и им могут быть присвоены значения с помощью оператора =. Циклы создаются с помощью оператора for и могут использоваться для повторения набора кода определенное количество раз.
Похожие сообщения:
- Решено: Добавить минуты к дате
- Решено: Базовый JavaScript Использовать рекурсию для создания обратного отсчета
- Решено: Базовый JavaScript Использовать рекурсию для создания диапазона чисел
- Решено: javascript капитализировать слова
- Решено: проверить, содержит ли строка только целые цифры.