Как мне проверить существование объекта в JavaScript?
Следующие работы:
if (!null)
alert("GOT HERE");
Но это выдает ошибку:
if (!maybeObject)
alert("GOT HERE");
Ошибка:
maybeObject
не определено.
Как мне проверить существование объекта в JavaScript?
Следующие работы:
if (!null)
alert("GOT HERE");
Но это выдает ошибку:
if (!maybeObject)
alert("GOT HERE");
Ошибка:
maybeObject
не определено.
Вы можете безопасно использовать оператор typeof
для переменных undefined.
Если ему присвоено какое-либо значение, включая 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
и других misteries, являются объектами хоста. Им нельзя доверять. Они могут делать практически любую грязную вещь, которую они хотят. Поэтому будьте осторожны с ними, проверяйте функциональность, если можете, потому что это единственный безопасный способ использования функции, которая может даже не существовать.
Вы можете использовать:
if (typeof objectName == 'object') {
//do something
}
Два пути.
Вы можете проверить локальный объект, используя typeof:
if (typeof object !== "undefined") {}
Вы можете проверить глобальный объект (определенный в глобальной области), проверив объект окна:
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) {
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 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)
для меня это сработало для DOM-объекта:
if(document.getElementsById('IDname').length != 0 ){
alert("object exist");
}
Вы можете использовать !
оператор дважды !!
:
if (!!maybeObject)
alert("maybeObject exists");
Или один раз !
ибо не существует:
if (!maybeObject)
alert("maybeObject does not exist");
Тема была открыта довольно давно. Тем временем я думаю, что использование троичного оператора является самым простым вариантом:
maybeObject ? console.log(maybeObject.id) : ""
if (n === Object(n)) {
// code
}
Если вы заботитесь только о его существовании (было ли оно объявлено?), Достаточно утвержденного ответа:
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!");
}
if (maybeObject !== undefined)
alert("Got here!");
установите значение текстового поля в один кадр для встроенного фрейма с помощью панели вкладок 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>
ноль и ноль являются неявными указателями. Если вы не выполняете арифметику, сравниваете или выводите "0" на экран, нет необходимости его набирать. Это неявное. Как и подразумевается. Typeof также не требуется по той же причине. Часы.
if (obj) console.log("существует");
Я не видел запрос на нет или еще там, поскольку он не включен как. Столько, сколько я люблю дополнительный контент, который не вписывается в вопрос. Давайте будем проще.
Думайте, что это проще всего
if(myobject_or_myvar)
alert('it exists');
else
alert("what the hell you'll talking about");
Или вы можете начать использовать мой эксклюзивный метод exists() и сделать что-то невозможным. то есть:.
Возможно также такие вещи, как: exists("blabla")
или даже: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
...