检查JavaScript中是否存在对象

问题描述 投票:279回答:18

如何在JavaScript中验证对象的存在?

以下作品:

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

但这会引发错误:

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

错误:

maybeObject没有定义。

javascript debugging variables null undefined
18个回答
528
投票

您可以安全地在未定义的变量上使用typeof运算符。

如果已为其分配任何值(包括null),则typeof将返回undefined以外的值。 typeof总是返回一个字符串。

因此

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

1
投票

您可以使用!运算符两次!!

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

或者一次!不存在:

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

What is the !! (not not) operator in JavaScript?


1
投票

对我来说,这适用于DOM对象:

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

1
投票

这个帖子很久以前就开了。我认为同时使用三元运算符是最简单的选择:

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

0
投票
if (n === Object(n)) {
   // code
}

0
投票

如果你只关心它的存在(已经声明了?),批准的答案就足够了:

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没有错误,如果值不存在加上&&短路,你将永远不会得到运行时错误。

就个人而言,我建议在某处添加帮助器fn(让我们不要相信typeof()):

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

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

-1
投票
if (maybeObject !== undefined)
  alert("Got here!");

-1
投票

使用div alignment选项卡面板将Textbox值设置为一帧到内嵌框架。首先,在设置值之前,我们需要使用以下代码检查选中的选项卡式面板框架是否可用:

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>

-1
投票

零和null是隐式指针。如果您没有进行算术运算,比较或在屏幕上打印“0”,则无需实际输入。它隐含着。如暗示。出于同样的原因,也不需要Typeof。看。

if(obj)console.log(“exists”);

我没有看到没有请求或者其他没有包括在内。尽管我喜欢不符合问题的额外内容。让我们保持简单。


-5
投票

认为这是最容易的

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

-9
投票

或者,您可以开始使用我的独有的exists()方法,并且能够执行被认为不可能的事情。即:

像:exists("blabla"),甚至:exists("foreignObject.guessedProperty.guessNext.propertyNeeded")也可能......


45
投票

这里有很多半真半假的事情,所以我觉得我做的事情更清楚了。

实际上,您无法准确判断变量是否存在(除非您希望将每一行包装到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。这是由于类型强制,这是Crockford一直告诉每个不确定这种事情的人总是使用严格的相等运算符===来测试可能的假值的主要原因。 null !== undefined为您提供您所期望的。还请注意,foo != null可以是检查变量既不是undefined也不是null的有效方法。当然,你可以是明确的,因为它可能有助于提高可读性。

如果你限制问题来检查对象是否存在,typeof o == "object"可能是一个好主意,除非你不考虑数组对象,因为这也将报告为object的类型,这可能会让你有点困惑。更不用说typeof null也会给你object,这是完全错误的。

关于typeofundefinednullunknown和其他misteries你应该小心的原始区域是宿主对象。他们不可信任。他们可以自由地做任何他们想要的脏东西。所以要小心它们,如果可以的话检查功能,因为它是使用甚至可能不存在的功能的唯一安全方式。


10
投票

您可以使用:

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

7
投票

两种方式。

typeof用于局部变量

您可以使用typeof测试本地对象:

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

全局变量的窗口

您可以通过检查窗口对象来测试全局对象(在全局范围上定义的对象):

if (window.FormData) {}

6
投票

如果这是一个全局对象,你可以使用if (!window.maybeObject)


5
投票

你可以使用“typeof”。

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

3
投票

我以前只是在我的javascripts中做一个if(maybeObject)作为空检查。

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

因此,只有当maybeObject - 是一个对象时,才会显示警报。我的网站上有一个例子。

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


3
投票

我刚刚测试了上面的typeOf示例,但没有一个适用于我,所以我使用了这个:

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

1
投票

除了检查对象/变量的存在之外,您可能希望提供“最坏情况”输出或至少将其捕获到警报中,以便不会被忽视。

检查,提供替代和捕获错误的函数示例。

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],如果x.m不存在,typeof x.m [z]将失败并出现错误。

我希望它有所帮助。 (顺便说一句,我是JS的新手)

© www.soinside.com 2019 - 2024. All rights reserved.