如何在JavaScript中验证对象的存在?
以下作品:
if (!null)
alert("GOT HERE");
但这会引发错误:
if (!maybeObject)
alert("GOT HERE");
错误:
maybeObject
没有定义。
您可以安全地在未定义的变量上使用typeof
运算符。
如果已为其分配任何值(包括null),则typeof将返回undefined以外的值。 typeof总是返回一个字符串。
因此
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
您可以使用!
运算符两次!!
:
if (!!maybeObject)
alert("maybeObject exists");
或者一次!
不存在:
if (!maybeObject)
alert("maybeObject does not exist");
对我来说,这适用于DOM对象:
if(document.getElementsById('IDname').length != 0 ){
alert("object exist");
}
这个帖子很久以前就开了。我认为同时使用三元运算符是最简单的选择:
maybeObject ? console.log(maybeObject.id) : ""
if (n === Object(n)) {
// code
}
如果你只关心它的存在(已经声明了?),批准的答案就足够了:
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!");
}
if (maybeObject !== undefined)
alert("Got here!");
使用div alignment选项卡面板将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>
零和null是隐式指针。如果您没有进行算术运算,比较或在屏幕上打印“0”,则无需实际输入。它隐含着。如暗示。出于同样的原因,也不需要Typeof。看。
if(obj)console.log(“exists”);
我没有看到没有请求或者其他没有包括在内。尽管我喜欢不符合问题的额外内容。让我们保持简单。
认为这是最容易的
if(myobject_or_myvar)
alert('it exists');
else
alert("what the hell you'll talking about");
或者,您可以开始使用我的独有的exists()方法,并且能够执行被认为不可能的事情。即:
像:exists("blabla")
,甚至:exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
也可能......
这里有很多半真半假的事情,所以我觉得我做的事情更清楚了。
实际上,您无法准确判断变量是否存在(除非您希望将每一行包装到try-catch块中)。
原因是Javascript有这个臭名昭着的undefined
值,这并不意味着变量没有定义,或者它不存在undefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
因此,存在的变量和不存在的变量都可以报告undefined
类型。
至于@凯文的误解,null == undefined
。这是由于类型强制,这是Crockford一直告诉每个不确定这种事情的人总是使用严格的相等运算符===
来测试可能的假值的主要原因。 null !== undefined
为您提供您所期望的。还请注意,foo != null
可以是检查变量既不是undefined
也不是null
的有效方法。当然,你可以是明确的,因为它可能有助于提高可读性。
如果你限制问题来检查对象是否存在,typeof o == "object"
可能是一个好主意,除非你不考虑数组对象,因为这也将报告为object
的类型,这可能会让你有点困惑。更不用说typeof null
也会给你object
,这是完全错误的。
关于typeof
,undefined
,null
,unknown
和其他misteries你应该小心的原始区域是宿主对象。他们不可信任。他们可以自由地做任何他们想要的脏东西。所以要小心它们,如果可以的话检查功能,因为它是使用甚至可能不存在的功能的唯一安全方式。
您可以使用:
if (typeof objectName == 'object') {
//do something
}
两种方式。
您可以使用typeof测试本地对象:
if (typeof object !== "undefined") {}
您可以通过检查窗口对象来测试全局对象(在全局范围上定义的对象):
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!");
}
除了检查对象/变量的存在之外,您可能希望提供“最坏情况”输出或至少将其捕获到警报中,以便不会被忽视。
检查,提供替代和捕获错误的函数示例。
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的新手)