如何使用JavaScript检查变量是否为空?

9

我在这方面运气不太好。 我正在尝试确定一个变量是否为空。

$('#content').mouseup(function() {

    var selection = getSelected();

    if (typeof(selection) !=='undefined') {
        alert(selection);
    }
});

这段代码的作用是获取用户选择的任何文本--但即使用户只是在div上放开鼠标,它也会显示一个空警告。

1
什么是 getSelected() 函数? - Håvard
getSelected() 函数来源于 https://dev59.com/Em035IYBdhLWcg3wSN4G - Mike
typeof是一个语句,而不是一个函数。 - Hello71
可能是如何在JavaScript中检查空字符串?的重复问题。 - T.Todua
3个回答

15

只需要说:

if (selection) {
    alert(selection);
}

在JavaScript中,简单的真/假测试结果为true(真),如果成员被定义、非null(非空),非false(非假),非空字符串或者非零。

另外,在JavaScript中,某些值可以等于undefined(undefined表示没有这样的命名对象存在)。例如:

var x = undefined;
alert(x===undefined); /* true; */
alert(x); /* false */
x=1;
alert(x); /* true */

alert(y===undefined); /* reference error - there's nothing called y */
alert(y); /* reference error */
alert(typeof y === "undefined"); /* true */

如下方评论所述,如果您不确定某个变量是否存在,应该先使用typeof进行测试。


1
需要注意的是,如果变量没有被声明,这将失败;它将引发 ReferenceError。 如果你需要确保变量存在并且具有某些真值:if (typeof selection !== 'undefined' && selection) ... - Reid
真的 - 在OP的问题中,他明确定义了“选择”,所以我简化了,但是你的注释无疑是这个知识基础的重要部分。实际上,当我说“被定义”时,我认为我的答案可能会稍微令人困惑。现实很混乱,因为某些东西实际上可能未定义,或者等于“未定义”。 - Jamie Treworgy
我必须先尝试使用typeof。仅仅执行if(selection)仍然显示一个空的警告框。 - Mike
1
@Mike,如果它实际上没有被定义,那么alert(selection)会导致错误。如果你得到一个空的警告框,那是因为selection的值是一些空白但不是空字符串的东西。也许它是一个单独的空格或其他东西。我不知道那个函数返回什么,但它没有返回一个空字符串,否则选择就不会显示。请参见:http://jsfiddle.net/2mm5n/ - Jamie Treworgy
对于很好的解释 +1 - Thamaraiselvam

8
您的代码在检测未定义值方面非常准确,这意味着即使没有选择内容,该函数也总是返回某种值。
例如,如果该函数返回一个选择对象(如window.getSelection函数),您可以检查isCollapsed属性来查看选择是否为空:
if (!selection.isCollapsed) ...

@Mike:恐怕这种方式只能在某些浏览器中起作用。你正在使用的函数根据浏览器返回不同的结果,可能是对象、字符串或布尔值。该函数应重写为返回一致的结果,否则将很难使用。 - Guffa
@Mike:对于现有函数的质量缺乏满意度,我提供了一个替代方案,它可以返回一致的结果:http://blog.guffa.com/2011/04/get-selected-text-a-better-way/ - Guffa

3
您可以简单地使用以下方法:
if (selection) {
  alert(selection);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接