Javascript 测试是否设置了变量

Javascript testing whether or not a variable is set

本文关键字:变量 设置 是否 测试 Javascript      更新时间:2023-09-26

通常,我测试变量是否设置如下:

if (variable !== '') {
   do something...
}

我知道还有其他方法可以测试变量,例如typeof但我看不到任何优势 - 这是测试是否设置变量的合适方法吗?我应该注意它有什么问题吗?

两个原因:

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

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

也许这只在某些情况下才会完成,例如当someScenario为真时。 稍后,您要检查是否已设置该变量。 您的均值返回 false 而不是 true。关键是,你可以想出你得到错误答案的场景。

没有理由以可接受的方式去做。

if(typeof variable !== 'undefined')

它不慢,没有真正的缺陷,只是多了几个角色。

2)最重要的是,使用typeof可以完全清楚你在问什么。 可读性至关重要,如果另一个程序员阅读了第一个代码,他们会认为你在检查它不是一个空字符串。使用typeof的方法可以非常清楚地了解您的条件正在寻找什么,并减少以后出错的几率。

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

if (variable !== '') {

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

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

if (typeof variable != "undefined") {

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

  • 定义
  • 0

检查返回false的唯一时间是传入空字符串时。
这就是你想要的吗?

查看coffeescript的存在主义运算符,通过在此页面上搜索"存在运算符": http://coffeescript.org/

您的

方法的功能问题是,您可能会在脚本之前的某个时间点无意中将空白字符串分配给变量,并且您的逻辑块现在将做错误的事情。

从风格的角度来看,您的解决方案不太理想,因为您检查变量是否存在的意图不明确。 第一次阅读您的代码的人可能会误解您编写的内容"我希望有一个名为变量的变量设置为空白字符串",而不是"如果此变量不存在,请执行某些操作"。

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

考虑一下这个剪影

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

这确保了a始终被设置,同时使其易于与''null0区分开来