Yar*_*rin 296 javascript variables debugging null undefined
如何在JavaScript中验证对象的存在?
以下作品:
if (!null)
alert("GOT HERE");
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:
if (!maybeObject)
alert("GOT HERE");
Run Code Online (Sandbox Code Playgroud)
错误:
maybeObject
没有定义.
JAL*_*JAL 548
您可以安全地typeof
在未定义的变量上使用运算符.
如果已为其分配任何值(包括null),则typeof将返回undefined以外的值.typeof总是返回一个字符串.
因此
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Run Code Online (Sandbox Code Playgroud)
gbl*_*zex 45
这里有很多半真半假的事情,所以我觉得我做的事情更清楚了.
实际上,您无法准确判断变量是否存在(除非您希望将每一行包装到try-catch块中).
原因是Javascript有这个臭名昭着的价值,undefined
这并不意味着变量没有定义,或者它不存在undefined !== not defined
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
Run Code Online (Sandbox Code Playgroud)
因此,存在的变量和不存在的变量都可以向您报告undefined
类型.
至于@凯文的误解,null == undefined
.这是由于类型强制,这是Crockford一直告诉每个不确定这种事情的人总是使用严格的相等运算符===
来测试可能的假值的主要原因.null !== undefined
给你你所期望的.另请注意,foo != null
可以检查一个变量既不是一种有效的方法undefined
,也没有null
.当然,你可以是明确的,因为它可能有助于提高可读性.
如果你限制问题来检查一个对象是否存在,typeof o == "object"
可能是个好主意,除非你不考虑数组对象,因为这也会报告这种类型object
可能会让你有点困惑.更不用说那typeof null
也会给你object
哪个是错的.
太极区,您真的应该小心typeof
,undefined
,null
,unknown
等misteries是主机对象.他们不可信任.他们可以自由地做任何他们想要的脏东西.所以要小心它们,如果可以的话检查功能,因为它是使用甚至可能不存在的功能的唯一安全方式.
Cal*_*vin 12
您可以使用:
if (typeof objectName == 'object') {
//do something
}
Run Code Online (Sandbox Code Playgroud)
如果这是一个全局对象,您可以使用 if (!window.maybeObject)
两种方式.
您可以使用typeof测试本地对象:
if (typeof object !== "undefined") {}
Run Code Online (Sandbox Code Playgroud)
您可以通过检查窗口对象来测试全局对象(在全局范围上定义的对象):
if (window.FormData) {}
Run Code Online (Sandbox Code Playgroud)
如果您只关心它的存在(是否已声明?),则批准的答案就足够了:
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Run Code Online (Sandbox Code Playgroud)
如果您关心它是否具有实际价值,您应该添加:
if (typeof maybeObject != "undefined" && maybeObject != null ) {
alert("GOT THERE");
}
Run Code Online (Sandbox Code Playgroud)
作为typeof( null ) == "object"
例如bar = { x: 1, y: 2, z: null}
typeof( bar.z ) == "object"
typeof( bar.not_present ) == "undefined"
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以检查它是否不是null
or undefined
,并且由于typeof
如果值不存在并且&&
短路也不会出错,因此您永远不会收到运行时错误。
就我个人而言,我建议在某处添加一个助手 fn (我们不要信任typeof()
):
function exists(data){
data !== null && data !== undefined
}
if( exists( maybeObject ) ){
alert("Got here!");
}
Run Code Online (Sandbox Code Playgroud)
您可以使用“ typeof”。
if(typeof maybeObject != "undefined")
alert("GOT HERE");
Run Code Online (Sandbox Code Playgroud)
小智 5
我曾经if(maybeObject)
在我的javascripts中做空检查。
if(maybeObject){
alert("GOT HERE");
}
Run Code Online (Sandbox Code Playgroud)
所以只有当maybeObject
- 是一个对象时,才会显示警报。我的网站上有一个例子。
https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
该线程很久以前就被打开了。我认为同时使用三元运算符是最简单的选择:
maybeObject ? console.log(maybeObject.id) : ""
Run Code Online (Sandbox Code Playgroud)