检查JavaScript中是否存在object

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

以下工作:

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

但是这会抛出一个错误:

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

错误:

maybeObject没有定义。

715700 次浏览

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

你可以使用:

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

你可以安全地在未定义的变量上使用typeof操作符。

如果它被赋值,包括null, typeof将返回非undefined的值。Typeof总是返回一个字符串。

因此

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

你可以用"typeof"。

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

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

实际上,您无法准确地判断变量是否存在(除非您想将每两行都包装成一个try-catch块)。

原因是Javascript有这个臭名昭著的值undefined,这并不意味着变量没有定义,或者它不存在

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(maybeObject)作为空检查在我的javascript。

if(maybeObject){
alert("GOT HERE");
}
因此,只有当maybeObject -是一个对象时,才会显示警报。 我有一个例子在我的网站

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

或者,你可以开始使用我的独家存在()方法,而能够做一些被认为是不可能的事情。例如:

像:exists("blabla"),甚至:exists("foreignObject.guessedProperty.guessNext.propertyNeeded")这样的东西也是可能的…

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

设置文本框值为一帧到内联帧使用div对齐选项卡面板。 因此,首先,在设置值之前,我们需要检查所选选项卡面板框架可用或不使用以下代码:

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>

两种方式。

用于局部变量的Typeof

你可以使用typeof测试本地对象:

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

全局变量窗口

你可以通过检查window对象来测试全局对象(在全局作用域中定义的对象):

if (window.FormData) {}

我觉得这样最简单

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

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

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

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不存在,则typeof x.m[z]将失败并报错。

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

我刚刚测试了上面的typeOf例子,没有一个适合我,所以我使用了这个:

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

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

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

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

0和null是隐式指针。如果你不做算术,比较,或打印'0'到屏幕上,就没有必要实际输入它。其隐含的。就像隐含的那样。出于同样的原因,Typeof也不是必需的。手表。

如果(obj) console.log(“存在”);

我没有看到request for a not或else,因为它不包括。就像我喜欢不符合问题的额外内容一样。让我们保持简单。

这个帖子很久以前就被打开了。同时,我认为使用三元运算符是最简单的选择:

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不会出错,所以你永远不会得到运行时错误。

就我个人而言,我建议在某个地方添加一个helper fn(让我们不要相信typeof()):

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


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