如何验证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
等misteries是主机对象。他们不能被信任。他们几乎可以随意做任何他们想做的肮脏的事情。因此,请谨慎使用它们,如果可以的话,请检查其功能,因为这是使用甚至可能不存在的功能的唯一安全方法。
您可以使用:
if (typeof objectName == 'object') {
//do something
}
两种方式。
局部变量的typeof
您可以使用typeof测试本地对象:
if (typeof object !== "undefined") {}
全局变量的窗口
您可以通过检查窗口对象来测试一个全局对象(在全局范围内定义的一个对象):
if (window.FormData) {}
如果这是一个全局对象,则可以使用 if (!window.maybeObject)
您可以使用“ typeof”。
if(typeof maybeObject != "undefined")
alert("GOT HERE");
我曾经if(maybeObject)
在我的JavaScript中只做一个空检查。
if(maybeObject){
alert("GOT HERE");
}
因此,仅当maybeObject
-是对象时,才会显示警报。我的网站上有一个例子。
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
该线程是在很早以前打开的。我认为,与此同时,使用三元运算符是最简单的选择:
maybeObject ? console.log(maybeObject.id) : ""
我刚刚从上面测试了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,xm,xm [z]和typeof xm [z],如果xm不存在,它将因错误而失败。
希望对您有所帮助。(顺便说一句,我是JS新手)
对我来说,这适用于DOM对象:
if(document.getElementsById('IDname').length != 0 ){
alert("object exist");
}
如果您只关心它的存在(是否已声明?),那么批准的答案就足够了:
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 (n === Object(n)) {
// code
}
if (maybeObject !== undefined)
alert("Got here!");
使用div alignmnt选项卡式面板将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>
0和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("blabla")
或甚至: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
也可以...
文章标签:debugging , javascript , null , undefined , variables
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!