簡體   English   中英

檢查 JavaScript 中是否存在對象

[英]Check if object exists in JavaScript

如何驗證 JavaScript 中對象的存在?

以下工作:

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

但這會引發錯誤:

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

錯誤:

maybeObject沒有定義。

您可以安全地對未定義的變量使用typeof運算符。

如果已為其分配任何值,包括 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 這是由於類型強制,這也是 Crockford 不斷告訴每個不確定這種事情的人始終使用嚴格相等運算符===來測試可能的假值的主要原因。 null !== undefined為您提供您所期望的。 另請注意, foo != null可以是檢查變量是否既不是undefined也不是null的有效方法。 當然,您可以明確表示,因為這可能有助於提高可讀性。

如果您將問題限制為檢查對象是否存在, typeof o == "object"可能是一個好主意,除非您不考慮數組對象,因為這也將報告為可能離開您的object類型有點困惑。 更不用說typeof null也會給你一個完全錯誤的object

您真正應該注意typeofundefinednullunknown和其他問題的主要區域是宿主對象。 他們不能被信任。 他們幾乎可以自由地做他們想做的任何骯臟的事情。 因此,請小心使用它們,如果可以,請檢查功能,因為這是使用甚至可能不存在的功能的唯一安全方式。

您可以使用:

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

兩種方式。

局部變量的 typeof

您可以使用 typeof 測試本地對象:

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

全局變量窗口

您可以通過檢查 window 對象來測試全局對象(在全局范圍內定義的對象):

if (window.FormData) {}

如果這是一個全局對象,你可以使用if (!window.maybeObject)

你可以使用“typeof”。

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

我曾經只是在我的 javascripts 中做一個if(maybeObject)作為空檢查。

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!"); }

該線程已在很久以前打開。 我認為同時使用三元運算符是最簡單的選擇:

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

如果您只關心它的存在(是否已聲明?),批准的答案就足夠了:

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 ,並且由於如果 value 不存在加上&&短路, typeof不會出錯,因此您永遠不會遇到運行時錯誤。

就我個人而言,我建議在某處添加一個助手 fn (並且讓我們不要相信typeof() ):

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

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

您可以使用! 操作員兩次!!

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

還是一次! 對於不存在:

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

是什么 !! (不是)JavaScript中的運算符?

除了檢查對象/變量的存在之外,您可能還想提供“最壞情況”輸出或至少將其捕獲到警報中,以免被忽視。

檢查、提供替代和捕獲錯誤的函數示例。

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 , xm , xm[z] 和 typeof xm[z] 如果 xm 不存在,則會失敗並出現錯誤。

我希望它有幫助。 (順便說一句,我是 JS 的新手)

對我來說,這適用於 DOM 對象:

if(document.getElementsById('IDname').length != 0 ){
   alert("object exist");
}
if (n === Object(n)) {
   // code
}
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("exists");

我沒有看到不要求,否則就沒有包括在內。 盡管我喜歡不適合問題的額外內容。 讓我們保持簡單。

認為這樣最簡單

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

或者,你們都可以開始使用我獨有的exists()方法,並能夠做被認為不可能的事情。 IE:

諸如: exists("blabla") ,甚至: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")也是可能的......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM