如何使用if语句用ES6声明一个新变量? JavaScript的

时间:2018-05-28 13:03:22

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

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

if (variableNotMade) {
  var makeVariable
}

但是如何使用letconst代替var来实现这一目标?
类似的帖子here表明可以这样做:

let makeVariable = variableNotMade ? foo : bar

虽然只有else这种方法才有效 有没有合适的方法来实现这一目标,还是应采取不同的方法?

3 个答案:

答案 0 :(得分:1)

In my opinion there is not such thing as an optional declaration. You declare the variable and then the assignment can be optional if you can call it that (better say conditional). Finally check for null.

Also let const and var are different things: let has a block scope, const is read only and block scoped and finally var has a function scope. There is a lot more involved in using them safely cause hey, it's JS, but that's is the summary.

答案 1 :(得分:1)

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

以此示例为例,假设它可以按预期工作:

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

alert(bar);

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

这就是为什么var声明将被提升并且变量存在的原因,仅具有undefined值。这就是letconst显式阻止作用域的原因;他们存在于他们的块中,并且将不会存在于他们的块之外。因此,您永远不会陷入“条件创建的变量”不存在的情况。

你想要的可能是:

let foo;

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

答案 2 :(得分:0)

如果您不想使用else阻止,则可以执行此操作

  

让makeVariable = variableNotMade&& foo

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