用 typeof 真正检查是不是未定义 [重复]
Posted
技术标签:
【中文标题】用 typeof 真正检查是不是未定义 [重复]【英文标题】:Really check if undefined with typeof [duplicate]用 typeof 真正检查是否未定义 [重复] 【发布时间】:2013-06-22 05:49:03 【问题描述】:什么是更好的解决方案?
if(typeof bla === "undefined" || bla === null)...
或者
if(bla)...
如果我做第二种解决方案,我真的需要检查它是否未定义吗?
谢谢。
【问题讨论】:
答案是“这取决于你到底想做什么”。 “真正检查是否未定义”...您的意思是,还是“未定义或 null”,因为在这些示例中您也在检查 null。 一个没有定义的属性是未定义的。这么一说,就很明显了。 null 是一个对象。它的类型为空。 undefined 不是对象,它的类型是未定义的。那部分不太明显。 ***.com/questions/6429225/… 【参考方案1】:对于“检查是否未定义”,最好的解决方案通常是第三个:
Demo
function isDef(obj)
var undefined;
return obj === undefined;
这会检查对象是否未定义而不会浪费时间使用typeof
,并且此测试不会像您的第二个测试那样使用""
、null
、NaN
或0
验证为真。
唯一的缺陷是有人可以覆盖全局undefined
对象。在 ES5 严格模式下是不可能的,但你的代码应该避免这种情况。使用本地 var undefined;
定义跟踪 undefined
可以为您做到这一点。
此外,通过使用 isDef
函数,您可以实现更好的、可移植的缩小和更简单的逻辑。
if (isDef(x))
// do something
else
// do something else
;
【讨论】:
var undefined;
行添加了什么?
@smerny 在我看来,这条线是无用的保护。由于 undefined 不能在全局范围内重新定义,因此只检查 obj===undefined 会更简单、更智能。【参考方案2】:
这取决于您期望变量包含的内容。
例如,如果它应该包含一个对象,则第二个选项可以正常工作,因为任何对象引用都是真实的。
例如,如果它应该包含一个布尔值,则第二个选项根本不起作用,因为false
会给出与不存在值相同的结果。
【讨论】:
所以可以肯定的是,检查 undefined 和 null 是更好的解决方案吗? @Christian:这取决于您需要确定的内容。没有适用于所有情况的理想方法。例如,null
值在某些情况下可能是完全有效的值。【参考方案3】:
我真的需要检查它是否未定义吗?
不,undefined 和 null 都解析为 false。第二种选择肯定更好。
【讨论】:
以上是关于用 typeof 真正检查是不是未定义 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript,检查嵌套对象属性是不是为空/未定义的优雅方法[重复]