JavaScript: can a variable have multiple values?

I'm fairly new to JavaScript beyond jQuery, and I was reading up on randomization in a JavaScript array & the shortcomings of using the Array.sort method with a random number. I see the recommendation instead is to use the Fisher-Yates shuffle. In looking at the JavaScript code for this method:

Array.prototype.randomize = function()
    var i = this.length, j, temp;
    while ( --i )
        j = Math.floor( Math.random() * (i - 1) );
        temp = this[i];
        this[i] = this[j];
        this[j] = temp;

I'm struck by this line:

var i = this.length, j, temp;

What's going on here? Is a variable being given multiple values, or is this shorthand for something?



A variable can never have multiple values at the same time.

The code you give is shorthand for

var i = this.length;
var j;
var temp;

Syntax like that above is legal in most programming languages.


var i = this.length, j, temp;

is the same as :

var i = this.length;
var j; // here the value is undefined
var temp; // same, temp has a an undefined value

No, it's the shorthand for: var i = this.length; var j; var temp;


You are creating three variables, and only the leftmost will be born with a value - in this case, whatever the value this.length is.

As pointed out by everyone else respondig to you question, it's the same as:

var i = this.length;
var j, temp;

Other languages like Java, C# and Visual Basic allow you to create variables with a similar syntax. I.E.:


// C# and Java
int i = this.length, j, temp;

// which is the same as:
int i = this.length;
int j, temp;


' Visual Basic
Dim i = this.length as Integer, j as Integer, temp as Integer

' Which is the same as:
Dim i = this.length as Integer
Dim j as Integer, temp as Integer

It's just multiple declaration of variables in a single line. It's equivalent to this:

var i, j, temp;
i = this.length;

Which is equivalent to this:

var i;
var j;
var temp;
i = this.length;

The specification defines the variables statement to be the var keyword, followed by a list of variables declarations, separated by a comma:

VariableStatement :
    var VariableDeclarationList ;

VariableDeclarationList :
    VariableDeclarationList , VariableDeclaration

Note the recursive definition of VariableDeclarationList. It means that an unlimited number of variables declarations can follow a var keyword.


var foo, bar;

is the same as

var foo;
var bar;

Related question: What is the advantage of initializing multiple javascript variables with the same var keyword?


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.