34

Is there any way to perform multiple assignment in JavaScript like this:

var a, b = "one", "two";

which would be equivalent to this:

var a = "one";
var b = "two";
1
  • 3
    If you want; var a = "one", b = "two"; Commented Jul 16, 2016 at 13:45

5 Answers 5

69

In ES6 you can do it this way:

var [a, b] = ["one", "two"];

The above code is ES6 notation and is called array destructuring/object destructuring (if it's an object).

You provide the array on the right-hand side of the expression and you have comma-separated variables surrounded by square brackets on the left-hand side.

The first variable maps to the first array value and so on.

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

6 Comments

please add some more description to it, so that the answer is fully understandable
If you are unsure about the technical term that you used here, then read and add it in your answer. developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Its destructuring we can use array destructuring since we are talking about arrays
var [a, b] = [1,2,3,4,5]
Will this incur any overhead from constructing the right-side array? Or are interpreters smart enough to have a fast path when the right side is an array literal?
|
13

While you cannot do var a, b = "one", "two";, and get them assigned to each variable in the respective order, you can do: var a, b; to initialize these variables as undefined.

You can also do var a, b = 'foo'; to assign b to 'foo', while initializing 'a' as undefined.

var a, b;

> a
--> undefined
> b
--> undefined
> var d, e;

> e
--> undefined

> f 
--> Uncaught ReferenceError: f is not defined

> var c, g = 'foo';

> c
--> undefined
> g
--> "foo"

Object destructuring

looks like:

const user = {
  id: 42,
  is_verified: true
};

const {id, is_verified} = user;

console.log(id); // 42
console.log(is_verified); // true 

You will also see this in JavaScript to import members of a module:

Import multiple exports from module. This inserts both foo and bar into the current scope.

import {foo, bar} from '/modules/my-module.js';

Comments

0

If you aren't absolutely married to the idea of the values being at the end of the statement, this works:

var a = "one", b = "two";

If you want to assign to variables that have already been declared, you can use the comma operator to make it a one-liner.

a = "ONE", b = "TWO";

Comments

0

I wanted to extend Ryan's answer - particularly when it comes to for loops. Normally one might write a for loop as:

for (var i = 0; i < arr.length; i++) {

As many contend, the interpretive nature of JS causes arr.length to be reevaluated on every loop - causing performance loss on large loops (depending on the nature of the upper-bound, e.g., a function). When performance is paramount, they suggest iterating backward:

for (var i = arr.length-1; i >= 0; i--) {

However, this approach will cause problems when order is relevant - not to mention being uncommon notation and unclear. To get around this problem, you can construct it thusly:

for (var i = 0, z = arr.length; i < z; i++) {

While not as succinct as a standard loop, it performs better whilest being easier to read than a reverse loop.

Comments

-14

No you can not do this way. Javascript doesn't support this type of declaration

2 Comments

Except that it does.
I seems you live in ice age of JS in ES6 you can use Destructuring Assignment

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.