更好的解决方案是什么?
if(typeof bla === "undefined" || bla === null)...
或者
if(bla)...
如果我做第二个解决方案,我真的需要检查它是否未定义吗?
谢谢。
更好的解决方案是什么?
if(typeof bla === "undefined" || bla === null)...
或者
if(bla)...
如果我做第二个解决方案,我真的需要检查它是否未定义吗?
谢谢。
这取决于您期望变量包含的内容。
例如,如果它应该包含一个对象,则第二个选项可以正常工作,因为任何对象引用都是真实的。
例如,如果它应该包含一个布尔值,则第二个选项根本不起作用,因为false
它会给出与不存在值相同的结果。
我真的需要检查它是否未定义吗?
不,undefined 和 null 都解析为 false。第二种选择肯定更好。
要“检查是否未定义”,最好的解决方案通常是第三种:
function isDef(obj) {
var undefined;
return obj === undefined;
}
这将检查对象是否未定义而不会浪费时间,并且typeof
此测试不会通过 , 或您的第二个测试验证""
为真。null
NaN
0
唯一的缺陷是有人可以覆盖全局undefined
对象。在 ES5 严格模式下是不可能的,但你的代码应该避免这种情况。undefined
使用本地var undefined;
定义进行遮蔽可以为您做到这一点。
此外,通过使用isDef
函数,您可以实现更好的、可移植的缩小和更简单的逻辑。
if (isDef(x)) {
// do something
} else {
// do something else
};