Javascript测试是否设置了变量

时间:2012-08-19 21:16:16

标签: javascript

通常,我会测试变量是否设置为这样:

if (variable !== '') {

   do something...

}

我知道有其他方法可以测试像typeof这样的变量,但我没有看到任何优势 - 这是测试变量是否设置的合适方法吗?是否存在我应该注意的问题?

5 个答案:

答案 0 :(得分:16)

有两个原因:

1)如果通过获取空输入框的内容来设置变量怎么办?

if(someScenario){
    var variable = $('empty-box').val(); }

也许这仅在某些情况下完成,例如someScenario为真。稍后,您要检查是否已设置该变量。你的手段返回false而不是true。重点是,你可以想出你得到错误答案的场景。

没有理由以接受的方式做到这一点。

if(typeof variable !== 'undefined')

它并不慢,没有真正的缺陷,只有几个字符。

2)最重要的是,使用typeof可以清楚地了解您所要求的内容。可读性至关重要,如果另一个程序员读取第一个代码,他们会认为你检查它不是一个空字符串。使用typeof的方法可以非常清楚您的条件所需要的内容,并减少以后出错的几率。

答案 1 :(得分:3)

如果已声明variable但可能没有值,则代码为:

if (variable !== '') {

测试它是否不是空字符串。那是你要的吗?空字符串可能是有效值。最好测试undefined,或者将其显式初始化为一个值,然后可以将其视为“无效”(可能是null,或者任何适合的值)。

如果上述代码未声明variable,则会导致错误,以致执行将在此时停止 - 您不能测试不存在的变量的值。因此,例如,如果您正在尝试测试在可能尚未调用的函数内创建的全局变量,或者您可能正在使用多个JS文件,并且需要测试可能会也可能不会的变量由其他一个文件创建,然后唯一的方法是:

if (typeof variable != "undefined") {

答案 2 :(得分:2)

由于您正在使用严格的相等性测试,因此以下内容都将返回true:

  • 未定义
  • 0

您的支票返回false的唯一时间是您传入一个空字符串 这就是你想要的吗?

答案 3 :(得分:2)

通过搜索此页面上的“存在操作员”,查看coffeescript的存在操作符:http://coffeescript.org/

您的方法的功能问题在于,您可能会在脚本之前的某个时刻无意中将空字符串分配给变量,而您的逻辑块现在将执行错误操作。

从风格角度来看,您的解决方案不太理想,因为您检查变量是否存在的意图尚不清楚。第一次只读你的代码的人可能会误解你写的是什么意思“我希望有一个变量命名变量设置为空字符串”而不是“如果这个变量不存在则做一些事情” 。“

答案 4 :(得分:0)

这可能是非常主观的,但我的建议是避免需要检查的代码,变量是否设置(a.o.t。有一些值或类型)。

考虑这个snipplet

var a=false;
if (some_condition) a="Blah";
if (typeof(a)=='string') ....
if (a===false) ...

这可以确保a始终设置,同时保持与''null0

的容易区分