4

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"
}

5 Answers 5

14

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.

Sign up to request clarification or add additional context in comments.

Comments

7

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

Comments

1

You can use ternary operator:

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

In you case:

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

Comments

0

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

Comments

0

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

condition ? exprIfTrue : exprIfFalse

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.