0

更好的解决方案是什么?

if(typeof bla === "undefined" || bla === null)...

或者

if(bla)...

如果我做第二个解决方案,我真的需要检查它是否未定义吗?

谢谢。

4

3 回答 3

3

这取决于您期望变量包含的内容。

例如,如果它应该包含一个对象,则第二个选项可以正常工作,因为任何对象引用都是真实的。

例如,如果它应该包含一个布尔值,则第二个选项根本不起作用,因为false它会给出与不存在值相同的结果。

于 2013-06-25T12:23:16.433 回答
0

我真的需要检查它是否未定义吗?

不,undefined 和 null 都解析为 false。第二种选择肯定更好。

于 2013-06-25T12:22:28.997 回答
0

“检查是否未定义”,最好的解决方案通常是第三种:

演示

function isDef(obj) {
    var undefined;
    return obj === undefined;
}

这将检查对象是否未定义而不会浪费时间,并且typeof此测试不会通过 , 或您的第二个测试验证""为真。nullNaN0

唯一的缺陷是有人可以覆盖全局undefined对象。在 ES5 严格模式下是不可能的,但你的代码应该避免这种情况。undefined使用本地var undefined;定义进行遮蔽可以为您做到这一点。

此外,通过使用isDef函数,您可以实现更好的、可移植的缩小和更简单的逻辑。

if (isDef(x)) {
    // do something
} else {
    // do something else
};
于 2013-06-25T12:22:48.680 回答