【问题标题】:Check if JavaScript variable is undefined / false in a function检查函数中的 JavaScript 变量是否未定义/错误
【发布时间】:2020-12-14 09:07:30
【问题描述】:

如果传递的参数未定义,检查函数的最佳方法是什么?

返回值应该是:

  • 如果 v 未定义,则返回 false
  • 如果定义了v,如果v为真则返回真,否则返回假
function isVariableFalse(v) {
    if (typeof v !== 'undefined') {     
        return false;
    }
    return v ? true: false;
}   

这个问题是当传递一个未定义的变量时,我已经得到了一个错误。

例如

isVariableFalse(someUndefinedVariable)

引发此错误:

未捕获的引用错误

【问题讨论】:

  • 你的条件'如果 v 已定义,如果 v 为真则返回真,否则返回假'听起来就像你只想要 v === true;
  • 也许你想要default parameters
  • 当你将undefined 传递给它时,那个函数should not throw that error
  • @Ivar 但抛出错误:尝试调用 isVariableFalse(some_undefined_variable);
  • 您不能使用尚未声明的变量,除非您使用 try/catch:try{isVariableFalse(some_undefined_variable);} catch() {console.log('ex'}。但你为什么要首先处理这些变量呢?

标签: javascript


【解决方案1】:

你在 JavaScript 中有真假概念。

"" 是虚假的,而 "something" 是真实的。 0 为假,5 为真。

所以如果你不想处理太多的情况,你可以使用双重否定符号:

let my_var = <some_value>;

if(!!my_var) {
  // do something
}

【讨论】:

  • 在 if 语句中使用双重否定是没有意义的。 if 语句中的表达式已在布尔上下文中使用。
  • 举个例子对不起我缺乏想象力^_^
  • 这不起作用。我得到一个 ReferenceError: v is not defined 而这种错误正是我想要捕捉的
  • 我们能看到更多代码吗,也许问题出在其他地方?
  • @MetallimaX 查看jsfiddle.net/Smolo/2648pbn7 并打开开发者控制台
【解决方案2】:

您收到 Reference Error 的原因是因为您没有声明 SomeUndefinedVariable 您传入 IsVariableFalse 函数。因此您必须在传入 IsVariableFalse 函数之前声明一个变量,如下所示
var SomeUndefinedVariable; //Which by default is undefined

【讨论】:

    【解决方案3】:

    你的函数给你一个错误的原因是,当向函数传递参数时,javascript 不传递变量,而是解包变量并发送它的值(或对其值的引用)。因此,当您将未定义的 var 作为参数时,没有任何东西可以解包,因此会发生错误。幸运的是,有一些简单的方法可以检查 var 是否已经存在,而无需构建自己的函数,例如

    if (v) { }
    
    if (v !== undefined) { }
    
    

    等等

    编辑作为字符串传递。

    function isVariableFalse(v) {
      return !!this[v] // Or you can write your own checks. Access the variable with this[v]
    }
    

    注意,这不适用于调用函数的本地变量,因为它们只存在于那里。例如。 (eval 也不行)

    function a() {
      let c = 5;
      console.log(isVariableFalse('c')) // Will output 'false'
    }
    

    【讨论】:

    • 当然,我可以检查 v 是否未定义,然后检查它是真还是假,但实际上为了重构,我想要一个函数,因为我需要检查多个变量。跨度>
    • 当然,但这就是我的意思。将其传递给函数是行不通的。但是你可以使用if (v) 或者只是!!v 在任何你想使用该功能的地方,它应该可以工作。
    • 查看 jsfiddle.net/Smolo/2648pbn7 并打开开发者控制台
    • 是的。我理解你的错误。你看我的回答了吗??您不能将未定义的变量传递给函数。这就是为什么你得到一个错误。您必须立即检查它们。正如我之前所说,您可以简单地通过if (v)!!v 进行检查
    • 是的,我现在明白我做不到。这实际上是我的问题。我知道我可以在函数之外检查它们。但我可能可以将它们作为字符串传递,例如 isVariableFalse('somevariable') 并在函数内部使用 eval()。
    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 2012-04-28
    • 2020-06-09
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多