[英]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
。
您真正應該注意typeof
、 undefined
、 null
、 unknown
和其他問題的主要區域是宿主對象。 他們不能被信任。 他們幾乎可以自由地做他們想做的任何骯臟的事情。 因此,請小心使用它們,如果可以,請檢查功能,因為這是使用甚至可能不存在的功能的唯一安全方式。
您可以使用:
if (typeof objectName == 'object') {
//do something
}
兩種方式。
您可以使用 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");
}
除了檢查對象/變量的存在之外,您可能還想提供“最壞情況”輸出或至少將其捕獲到警報中,以免被忽視。
檢查、提供替代和捕獲錯誤的函數示例。
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.