如何验证JavaScript中是否存在对象?
以下作品:
if (!null)
alert("GOT HERE");
但这会引发错误:
if (!maybeObject)
alert("GOT HERE");
错误:
maybeObject
未定义。
答案 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
这是完全错误的。
您应该注意object
,typeof
,undefined
,null
和其他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");
答案 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")
也可能......