代码之家  ›  专栏  ›  技术社区  ›  Yarin

检查对象是否存在于JavaScript中

  •  275
  • Yarin  · 技术社区  · 14 年前

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

    以下工作:

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

    但这会引发一个错误:

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

    错误:

    maybeObject 未定义。

    18 回复  |  直到 7 年前
        1
  •  551
  •   Tom Halladay Amy B    11 年前

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

    如果为它分配了任何值(包括空值),typeof将返回未定义以外的值。typeof总是返回一个字符串。

    因此

    if (typeof maybeObject != "undefined") {
       alert("GOT THERE");
    }
    
        2
  •  46
  •   gblazex    12 年前

    这里有很多半真半假的东西,所以我想我把一些事情说清楚了。

    实际上,你不能准确地判断变量是否存在(除非你想把每一行都封装成一个尝试catch块)。

    原因是Javascript有一个臭名昭著的价值 undefined 这并不意味着变量没有被定义,或者它不存在。 undefined !== not defined

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

    所以存在的变量和另一个变量都不能向你报告 未定义 键入。

    至于@Kevin的误解, null == undefined . 这是由于类型强制,这是Crockford一直告诉所有不确定这类事情的人总是使用严格的等式运算符的主要原因 === 测试可能错误的值。 null !== undefined 给你你想要的。还请注意 foo != null 可以有效地检查变量是否为 未定义 也不是 null . 当然,你可以说得很清楚,因为这可能有助于可读性。

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

    你真正应该小心的地方 typeof , 未定义 , 无效的 , unknown 而其他的迷雾则是宿主。他们不可信。他们几乎可以做任何他们想做的肮脏的事情。所以要小心,如果可以的话,检查一下它的功能,因为它是使用一个甚至不存在的特性的唯一安全方法。

        3
  •  12
  •   Calvin    14 年前

    您可以使用:

    if (typeof objectName == 'object') {
        //do something
    }
    
        4
  •  7
  •   Nikita Rybak    14 年前

    如果是全局对象,则可以使用 if (!window.maybeObject)

        5
  •  7
  •   manuell    6 年前

    两种方式。

    局部变量的类型

    可以使用以下类型测试本地对象:

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

    全局变量窗口

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

    if (window.FormData) {}
    
        6
  •  5
  •   RussellUresti    14 年前

    你可以用“typeof”。

    if(typeof maybeObject != "undefined")
        alert("GOT HERE");
    
        7
  •  3
  •   tusar    13 年前

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

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

    所以只有在 maybeObject -如果是对象,则会显示警报。 我的网站上有一个例子。

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

        8
  •  3
  •   Lucass    5 年前

    我刚刚测试了上面的示例类型,没有一个对我有效,所以我使用了这个:

        btnAdd = document.getElementById("elementNotLoadedYet");
        if (btnAdd) {
           btnAdd.textContent = "Some text here";
        } else {
          alert("not detected!");
        }
        9
  •  2
  •   Rohmer    5 年前

    你可以使用 ! 操作员两次 !! :

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

    或者一次 ! 不存在:

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

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

        10
  •  1
  •   Rub    10 年前

    除了检查对象/变量的存在之外,您还可能希望提供一个“最坏情况”的输出,或者至少将其捕获到一个警告中,这样它就不会被忽略。

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

    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不存在,x.m(z)的类型将失败。

    我希望有帮助。(顺便说一下,我是JS新手)

        11
  •  1
  •   and-bri    6 年前

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

    if(document.getElementsById('IDname').length != 0 ){
       alert("object exist");
    }
    
        12
  •  1
  •   Greg Holst    6 年前

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

    maybeObject ? console.log(maybeObject.id) : ""
    
        13
  •  1
  •   alejandrociatti    5 年前

    如果你只关心它的存在(它被宣布了吗?),认可的答案就足够了:

    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!"); 
    }
    
        14
  •  0
  •   durron597    9 年前
    if (n === Object(n)) {
       // code
    }
    
        15
  •  -1
  •   plunk2000    12 年前
    if (maybeObject !== undefined)
      alert("Got here!");
    
        16
  •  -1
  •   Baby Groot Duleendra    11 年前

    使用div alignmnt选项卡式面板将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>
    
        17
  •  -1
  •   ireadgud    6 年前

    零和空是隐式指针。如果您没有做算术,比较,或打印'0'到屏幕上,没有必要真正键入它。它的含蓄。如暗示的那样。出于同样的原因,Typeof也不是必需的。注意。

    如果(OBJ)控制台.log(“存在”);

    我没有看到一个不要求,否则那里不包括作为。就像我喜欢不适合这个问题的额外内容一样。让我们保持简单。

        18
  •  -5
  •   Andrei    11 年前

    觉得这样最简单

    if(myobject_or_myvar)
        alert('it exists');
    else
       alert("what the hell you'll talking about");
    
        19
  •  -9
  •   Bill the Lizard    13 年前

    或者,你们可以开始使用我的独家 存在() 方法代替,并且能够做一些被认为不可能的事情。即。:

    例如: exists("blabla") ,甚至: exists("foreignObject.guessedProperty.guessNext.propertyNeeded") 也有可能。。。