Answers:
您可以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是主机对象。他们不能被信任。他们几乎可以随意做任何他们想做的肮脏的事情。因此,请小心使用它们,如果可以的话,请检查其功能,因为这是使用甚至不存在的功能的唯一安全方法。
foo!=null
如果foo
未定义,仅执行此操作将产生ReferenceError 。因此,最好使用typeof
,除非您打算捕获异常。
undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
。我没有说过!= null
检查它是否存在。您将其与上下文无关。(我也提到过,这只是一个旁注,与OP的问题并不严格相关)
undefined
。他们不一样。(note) it can be used !== you should use
。阅读时使用常识。当声明了变量(参数列表或其他地方)并且您想检查它是否有值时,!=
null是完全安全的。这是与OP要求不同的用例,这就是为什么我将其引入注释的原因。整个段落是关于@Kevin的帖子和类型强制btw。如您所见,请仔细阅读。
!= null
。这对于检查函数参数非常有用,请考虑:var hasValue = function(foo) {return foo != null}
如果这是一个全局对象,则可以使用 if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
它更具可读性,如果它是一个全局对象
该线程是在很早以前打开的。同时,我认为使用三元运算符是最简单的选择:
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
然后检查是否false
。
我曾经if(maybeObject)
在我的JavaScript中只做一个空检查。
if(maybeObject){
alert("GOT HERE");
}
因此,仅当maybeObject
-是对象时,才会显示警报。我的网站上有一个例子。
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
maybeObject
是0, 0.0, or ""
,它将检查为假
除了检查对象/变量的存在之外,您可能还想提供“最坏情况”输出,或者至少将其捕获到警报中,以免引起注意。
检查,提供替代方法并捕获错误的函数示例。
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
我之所以创建它也是因为,如果xm不存在,我传递给它的对象可能是x,xm,xm [z]和typeof xm [z]会因错误而失败。
希望对您有所帮助。(顺便说一句,我是JS新手)
如果只关心它的存在(是否已声明?),那么批准的答案就足够了:
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
}
使用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>
或者,您所有人都可以改用我的独占存在()方法,并能够执行被认为不可能的事情。即:
事情是这样:exists("blabla")
或甚至: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
也可以...
!==
进行比较。