Overcranked
Overcranked

Reputation: 175

Array syntax error newbie

I am lost in this error. I am trying to write a function and write a array in that function. in an external js file. This is going to be a random image loading function but i keep getting an error with the array and can't figure out why.

function  randImg(){
    var imgs = new Array(); 
    img[0]="banner1.png";
    img[1]="banner2.png";
    img[2]="banner3.png";
    var maxium = img.length;
}

I am getting the error on the var imgs line. any ideas?

Here is my new code calling the variable "img" was throwing me off it loads ok but it only prints out the text in the variable and not the actually file!? so at run it say "banner1.png" or "banner3.png"? any thoughts

function randImg(){
var banner = new Array();
banner[0] = "banner1.png";
banner[1] = "banner2.png";
banner[2] = "banner3.png";
var maxImg = banner.length;
var randNum = Math.floor(Math.random()*maxImg);
return banner[randNum];
}

Upvotes: 1

Views: 634

Answers (2)

Peter Ajtai
Peter Ajtai

Reputation: 57685

Your variable names should be consistent. You created the new Array imgs (local variable), yet you added to img (defaulted to global variable, since you didn't declare it a local variable).

Also, note that in Javascript it doesn't make too much sense to add a var statement that is not the first line of a function. This is because of hoisting. Essentially, Javascript will take your var and move it to the first line, setting the variable to undefine. This may or may not affect how your program works vs how you think it should work, so it's best to add all your vars at the top of your functions. Javascript has function scope, not block scope.

(also note that maximum is a more meaningful variable name than maxium)

// This adds to the newly created array:
function  randImg(){
    var img = new Array(), // Note: img NOT imgs
        maximum; // Even if a var is below this line, Javascript hoists it here
    img[0] = "banner1.png";
    img[1] = "banner2.png";
    img[2] = "banner3.png";
    maximum = img.length; 
}

and you can use .push() if you're just adding to the end of an array (like you're doing)

function  randImg(){
    var img = new Array(), // Note: img NOT imgs
        maximum;
    img.push("banner1.png");
    img.push("banner2.png");
    img.push("banner3.png");
    maximum = img.length;
}

or

function  randImg(){
    var img = new Array(), // Note: img NOT imgs
        maximum;
    img.push("banner1.png").push("banner2.png").push("banner3.png)";
    maximum = img.length;
}

or better yet, just use [] to initialize an empty array or [a,b,c,...] to initialize an array with elements. Also, why use var twice?

function  randImg(){
    var img = ["banner1.png","banner2.png","banner3.png"], // note comma
        maximum = img.length;
}

Finally, to live up to the name of the function

var randImg = function() {
    var img = ["banner1.png","banner2.png","banner3.png"];
    return img[Math.floor(Math.random()*img.length)];
}

... and here's a working example of randImg()

Upvotes: 2

David Tran
David Tran

Reputation: 10606

A better way to define the array with its elements:

var img = [
      "banner1.png",
      "banner2.png",
      "banner3.png",
      "banner4.png"
]

And this is the function you might need:

function randImg(){
    var img = [
          "banner1.png",
          "banner2.png",
          "banner3.png",
          "banner4.png"
    ]
    var maxImg = img.length;
    var randNum = Math.floor(Math.random()*maxImg)
    return img[randNum]
}

Upvotes: 3

Related Questions