检查JavaScript中是否存在对象

时间:2010-11-15 17:04:55

标签: javascript debugging variables null undefined

如何验证JavaScript中是否存在对象?

以下作品:

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

但这会引发错误:

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

错误:

  

maybeObject未定义。

19 个答案:

答案 0 :(得分:517)

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

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

因此

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

答案 1 :(得分: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类型。

至于@Kevin的误解,null == undefined。这是由于类型强制,这是Crockford一直告诉每个不确定这种事情的人总是使用严格的相等运算符===来测试可能的假值的主要原因。 null !== undefined为您提供您可能期望的内容。另请注意,foo != null可以是检查变量既不是undefined也不是null的有效方法。当然,你可以是明确的,因为它可能有助于提高可读性。

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

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

答案 2 :(得分:11)

您可以使用:

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

答案 3 :(得分:6)

两种方式。

局部变量的类型

您可以使用typeof:

测试本地对象
if (typeof object !== "undefined") {}

全局变量窗口

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

if (window.FormData) {}

答案 4 :(得分:6)

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

答案 5 :(得分:4)

我曾经在我的javascripts中做了if(maybeObject)作为空检查。

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

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

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

答案 6 :(得分:4)

你可以使用“typeof”。

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

答案 7 :(得分:3)

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



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




答案 8 :(得分: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不存在,则type.x.m [z]将失败并显示错误。

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

答案 9 :(得分:1)

对我而言,这适用于DOM对象:

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

答案 10 :(得分:1)

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

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

或者一次!不存在:

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

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

答案 11 :(得分:0)

使用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>

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

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

我没有看到要求不包含的请求,否则就没有包含。我非常喜欢多余的内容,这些内容不适合这个问题。让我们保持简单。

答案 14 :(得分:0)

该线程是在很早以前打开的。同时,我认为使用三元运算符是最简单的选择:

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

答案 15 :(得分:0)

如果您只关心它的存在(它已被声明吗?),那么批准的答案就足够了:

MapView

如果您关心它的实际值,则应添加:

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()

答案 16 :(得分:-1)

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

答案 17 :(得分:-5)

认为这是最简单的

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

答案 18 :(得分:-8)

或者,你们都可以开始使用我独有的 exists()方法,并且可以做一些被认为不可能完成的事情。即:

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