【问题标题】:How to use if statement to declare a new variable with ES6? JavaScript如何使用 if 语句在 ES6 中声明一个新变量? JavaScript
【发布时间】:2018-11-07 02:15:14
【问题描述】:

如何选择使用letconst 声明变量? 例如可以这样做:

if (variableNotMade) {
  var makeVariable
}

但是如何使用letconst 而不是var 来实现呢?
类似的帖子here 表明可以这样做:

let makeVariable = variableNotMade ? foo : bar

虽然这种方法只有在您拥有else 时才真正有效。
是否有合适的方法来实现这一点,还是应该采取不同的方法?

【问题讨论】:

  • if 语句中用var 声明变量没有意义,因为无论如何该变量都会被提升到函数范围。您可以使用 letconst 来完成此操作,但该变量仅在封闭块内定义。

标签: javascript if-statement ecmascript-6 constants let


【解决方案1】:

您不应该“有条件地创建变量”。您可以有条件地为变量赋值,但不能有条件地创建它。

以这个例子为例,假设它会像你期望的那样工作:

if (foo) {
    var bar = 'baz';
}

alert(bar);

那么如果foofalse,那么bar 没有被创建,那么alert(bar) 会引发关于未定义变量的错误?!不,这太疯狂了。

这就是为什么var 声明将被提升并且变量 存在,仅具有undefined 值。这就是为什么letconst 是明确的块作用域;它们存在于它们的块内,并且它们不会存在于它们的块外。所以你永远不会遇到“条件创建的变量”不存在的情况。

你想要的大概是:

let foo;

if (bar) {
    foo = 'baz';
}

【讨论】:

    【解决方案2】:

    在我看来,没有可选声明这样的东西。您声明变量,然后分配可以是可选的,如果您可以调用它(最好是有条件的)。最后检查null。

    另外letconstvar是不同的东西: let 有一个块作用域,const 是只读和块作用域,最后var 有一个函数作用域。安全使用它们涉及更多内容,因为嘿,它是 JS,但这就是摘要。

    【讨论】:

      【解决方案3】:

      如果你不想要 else 块,你可以这样做

      让 makeVariable = variableNotMade && foo

      但这会将 makeVariable 设置为 false。 所以,如果这不是你特别想要的,你应该使用 deceze♦ 方法。

      【讨论】:

        猜你喜欢
        • 2021-03-04
        • 1970-01-01
        • 2013-07-09
        • 2014-04-12
        • 1970-01-01
        • 1970-01-01
        • 2013-01-15
        • 2018-04-15
        • 1970-01-01
        相关资源
        最近更新 更多