Javascript测试是否设置了变量

Tho*_*mas 5 javascript

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

if (variable !== '') {

   do something...

}
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*ick 17

两个原因:

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

if(someScenario){
    var variable = $('empty-box').val(); }
Run Code Online (Sandbox Code Playgroud)

也许只有在某些情况下才会这样做,就像什么时候一样someScenario.稍后,您要检查是否已设置该变量.你的手段返回false而不是true.重点是,你可以想出你得到错误答案的场景.

没有理由按照公认的方式去做.

if(typeof variable !== 'undefined')
Run Code Online (Sandbox Code Playgroud)

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

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


nnn*_*nnn 5

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

if (variable !== '') {
Run Code Online (Sandbox Code Playgroud)

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

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

if (typeof variable != "undefined") {
Run Code Online (Sandbox Code Playgroud)