Home > other >  Define a variable in JavaScript as a block
Define a variable in JavaScript as a block

Time:10-15

In Swift, I can do this to define a variable:

let foo: String = {
    if bar {
        return "42"
    } else {
        return "43"
    }
}()

How can I define a variable like this in JavaScript? I know that you can define a variable as undefined and redefine it in the if block, but that's an ugly syntax IMO, since "foo" would get repeated 3 times instead of 1 in the Swift example:

let foo

if (bar) {
    foo = "42"
} else {
    foo = "43"
}

CodePudding user response:

If the logic is short enough you could use a conditional operator:

let foo = bar ? "42" : "43"

If the logic is more complicated, then i personally would do the last example you showed. But one other alternative you could consider is using an immediately invoked function expression:

let foo = (() => {
  if (bar) {
    return "42"
  } else {
    return "43"
  }
})()

This creates an anonymous function, calls it immediately, and then whatever it returns gets assigned to foo.

CodePudding user response:

If you're just setting the value conditionally you can use a ternary expression:

const foo = bar ? '42' : '43'

You could use a function for more complex logic:

let bar = true;
const foo = computeFoo(bar);

function computeFoo(bar) {
  if (bar) {
    return "42";
  }
  return "43";
}

console.log(foo); // 42

Or an IIFE:

let bar = true;
const foo = (() => {
  if (bar) {
    return "42";
  }
  return "43";
})()

console.log(foo); // 42

CodePudding user response:

You can use ternary operator:

let variable = true ? "A" : "B"

In you case:

let foo = bar ? '42' : '43'

CodePudding user response:

Just to add a frisson to the answer set:

const bar = false

let foo = (() => {
  switch(true) {
    case bar:
      return "42"
    default:
      return "43" 
  }
})()

console.log(foo) // 43

CodePudding user response:

let foo = bar ? '42' : '43'

condition ? exprIfTrue : exprIfFalse

  • Related