881

What's the real difference between declaring an array like this:

var myArray = new Array();

and

var myArray = [];
Mi-Creativity
  • 9,101
  • 10
  • 33
  • 44
Amr Elgarhy
  • 59,046
  • 67
  • 178
  • 291
  • 1
    `[]` token: `ARRAY_INIT`; `new Array` tokens: `NEW, IDENTIFIER`; `new Array()` tokens: `NEW, IDENTIFIER, CALL` – noobninja Feb 18 '19 at 06:16

18 Answers18

998

There is a difference, but there is no difference in that example.

Using the more verbose method: new Array() does have one extra option in the parameters: if you pass a number to the constructor, you will get an array of that length:

x = new Array(5);
alert(x.length); // 5

To illustrate the different ways to create an array:

var a = [],            // these are the same
    b = new Array(),   // a and b are arrays with length 0

    c = ['foo', 'bar'],           // these are the same
    d = new Array('foo', 'bar'),  // c and d are arrays with 2 strings

    // these are different:
    e = [3]             // e.length == 1, e[0] == 3
    f = new Array(3),   // f.length == 3, f[0] == undefined

;

Another difference is that when using new Array() you're able to set the size of the array, which affects the stack size. This can be useful if you're getting stack overflows (Performance of Array.push vs Array.unshift) which is what happens when the size of the array exceeds the size of the stack, and it has to be re-created. So there can actually, depending on the use case, be a performance increase when using new Array() because you can prevent the overflow from happening.

As pointed out in this answer, new Array(5) will not actually add five undefined items to the array. It simply adds space for five items. Be aware that using Array this way makes it difficult to rely on array.length for calculations.

Adam Gerthel
  • 538
  • 3
  • 7
  • 18
nickf
  • 499,078
  • 194
  • 614
  • 709
  • 68
    This is slightly wrong. There is one very important difference between new Array() and [] I'll elaborate in my answer. – coderjoe Aug 13 '09 at 19:01
  • 32
    But as noted in your answer, it's only different if you are completely insane and overwrite the Array function..? – nickf Aug 13 '09 at 22:59
  • 20
    Well the importance is that using the new operator causes the interpreter to take all sorts of extra steps to go to the global scope, look for the constructor, call the constructor and assign the result... which in the majority case is going to be a a runtime array. You can avoid the overhead of looking for the global constructor by just using []. It may seem small, but when you're shooting for near real-time performance in your app, it can make a difference. – coderjoe Aug 14 '09 at 02:02
  • 2
    @nickf your use of `===` may be confusing to the layman - specifically those tests would be false _because they are **not** comparing the same object_. They may be _indistinguishable_, but they are not _equal_. – Alnitak Apr 30 '12 at 14:32
  • 5
    There is a huge performance difference: http://jsperf.com/create-an-array-of-initial-size/2 – Marco Luglio Jan 23 '13 at 20:28
  • 4
    True, but you also don't need semicolons or line-breaks in most places where I add them. It's about consistency and legibility. You know, IMHO. – nickf Nov 07 '13 at 01:15
  • There's another difference too that's important from a performance perspective. Using `new Array()` it's possible to set the stack size on creation. Otherwise the array will have to be recreated in memory when the stack overflows. See https://stackoverflow.com/a/44032020/930998 for a more elaborate explanation. – Adam Gerthel Jun 07 '19 at 08:26
788

The difference between creating an array with the implicit array and the array constructor is subtle but important.

When you create an array using

var a = [];

You're telling the interpreter to create a new runtime array. No extra processing necessary at all. Done.

If you use:

var a = new Array();

You're telling the interpreter, I want to call the constructor "Array" and generate an object. It then looks up through your execution context to find the constructor to call, and calls it, creating your array.

You may think "Well, this doesn't matter at all. They're the same!". Unfortunately you can't guarantee that.

Take the following example:

function Array() {
    this.is = 'SPARTA';
}

var a = new Array();
var b = [];

alert(a.is);  // => 'SPARTA'
alert(b.is);  // => undefined
a.push('Woa'); // => TypeError: a.push is not a function
b.push('Woa'); // => 1 (OK)

In the above example, the first call will alert 'SPARTA' as you'd expect. The second will not. You will end up seeing undefined. You'll also note that b contains all of the native Array object functions such as push, where the other does not.

While you may expect this to happen, it just illustrates the fact that [] is not the same as new Array().

It's probably best to just use [] if you know you just want an array. I also do not suggest going around and redefining Array...

Community
  • 1
  • 1
coderjoe
  • 10,675
  • 2
  • 23
  • 25
  • 163
    Well, good to know I suppose. What sort of person would overwrite the array class, I do not know... – nickf Aug 13 '09 at 22:58
  • 163
    You're absolutely right. Only a madman would overwrite the array class. Now take a moment and consider all the extra work using new Array() makes the interpreter do to support these madmen. I just avoid it all together with []. – coderjoe Aug 14 '09 at 02:01
  • 53
    Good example of the kind of global pollution that is possible with JavaScript. – David Snabel-Caunt Feb 04 '10 at 23:11
  • 8
    Worth noting that the new Array(size) is faster than other possible methods using the [] notation. Source: http://jsperf.com/create-an-array-of-initial-size/2 – Marco Luglio Jan 23 '13 at 20:25
  • 9
    Unfortunately that test is improperly prepared. It's testing an initialization of an Array with initializations of arrays followed by Array access. There's no control to prove that the browsers are actually pre-allocating the memory (which the specification does not say they must do). If we can assume that array access is constant and the majority of the time will be spent allocating memory in both examples then [] could be preferable if you're instantiating millions of arrays. http://jsperf.com/array-instanciation – coderjoe Jan 30 '13 at 15:34
  • Extending Array is just fine, though, such as creating an Array.map() function (I actually had to do that in an interview one time). – Andrew Larsson Jul 10 '13 at 16:23
  • I disagree. What happens when your version of Array.map and my version of Array.map collide and have different method signatures? I'm not just making this up either. I've run into exactly this problem using libraries that blindly extend core objects. It may be fine if you're the only one doing it, but the moment you start pulling in external libraries you might cause yourself quite a few headaches. These days I prefer either wrapper objects, external support functions, or libraries that allow you to chose when to extend core functionality (and make sure not to rely on it internally). – coderjoe Jul 25 '13 at 14:33
  • 2
    This may be of interest. http://jslinterrors.com/the-array-literal-notation-is-preferrable/ – AkiRoss Apr 28 '14 at 09:31
  • @coderjoe "Only a madman would overwrite the array class" So true. Many programmers do insane things like this. – Hal50000 Nov 25 '15 at 17:27
  • 1
    Spartans are the madmen. – Dadan Sep 14 '16 at 17:12
  • Can you elaborate this "(var a = [])You're telling the interpreter to create a new runtime array"? Does the js engine call the Array constructor to create a runtime array? – hackjutsu Nov 19 '16 at 02:34
  • @Hackjutsu I believe that the interpreter's native array constructor is called, any overridden constructors are not. Does that clarify? – coderjoe Feb 17 '17 at 03:28
  • 1
    I think this answer is unrelated to the OP's question. You're basically pointing out a feature/flaw of JavaScript, that all objects can be overwritten. Yeah, of course, but this answer doesn't belong in a question about arrays, it belongs in a discussion of JavaScript objects: putting this disclaimer on every object just adds FUD to the learning process. – PeterT Apr 11 '18 at 16:48
  • 3
    @PeterT I believe you've completely missed the point. Overwriting Array was used as an example but is not the difference between using "var a = [];" and "var a = new Array();". The former does not use the globally defined constructor, the latter does. Overwriting the object was only used as a convenient user executable example proving the point. The "feature/flaw" of Javascript is irrelevant. The OP asked what the difference was, this question answers it. One version ignores the globally defined object constructor the other does not. – coderjoe Aug 13 '18 at 17:50
  • Your answer not related to question. You declare own function 'Array', so you created new local scope 'Array', which has nothing to do with JavaScript build-in Array object. So when calling new Array(), nothing do with JavaScript Array. – Aniruddha Mar 13 '19 at 17:53
  • Question: does `new Array(n)` create an array while `[]` is a list (dynamic array)? – Amir Jul 15 '19 at 20:20
105

There is an important difference that no answer has mentioned yet.

From this:

new Array(2).length           // 2
new Array(2)[0] === undefined // true
new Array(2)[1] === undefined // true

You might think the new Array(2) is equivalent to [undefined, undefined], but it's NOT!

Let's try with map():

[undefined, undefined].map(e => 1)  // [1, 1]
new Array(2).map(e => 1)            // "(2) [undefined × 2]" in Chrome

See? The semantics are totally different! So why is that?

According to ES6 Spec 22.1.1.2, the job of Array(len) is just creating a new array whose property length is set to the argument len and that's it, meaning there isn't any real element inside this newly created array.

Function map(), according to spec 22.1.3.15 would firstly check HasProperty then call the callback, but it turns out that:

new Array(2).hasOwnProperty(0) // false
[undefined, undefined].hasOwnProperty(0) // true

And that's why you can not expect any iterating functions working as usual on arrays created from new Array(len).

BTW, Safari and Firefox have a much better "printing" to this situation:

// Safari
new Array(2)             // [](2)
new Array(2).map(e => 1) // [](2) 
[undefined, undefined]   // [undefined, undefined] (2) 

// Firefox
new Array(2)             // Array [ <2 empty slots> ]
new Array(2).map(e => 1) // Array [ <2 empty slots> ]
[undefined, undefined]   // Array [ undefined, undefined ]

I have already submitted an issue to Chromium and ask them to fix this confusing printing: https://bugs.chromium.org/p/chromium/issues/detail?id=732021

UPDATE: It's already fixed. Chrome now printed as:

new Array(2)             // (2) [empty × 2]
Hux
  • 1,187
  • 1
  • 7
  • 6
  • 22
    Yours is the only actual answer – Victor Sep 15 '17 at 08:31
  • 1
    This makes sense, I just bumped into a different construct I can't find documented references for: `[...Array(2)]` which is equivalent to `[undefined, undefined]` from a results standpoint. – Roberto Andrade Feb 28 '19 at 22:05
  • Looks like the answer to my previous comments is "Spread operator": https://javascript.info/rest-parameters-spread-operator – Roberto Andrade Feb 28 '19 at 22:13
  • @RobertoAndrade that make sense because spread operator will need to read off the entries so it can apply such copying...and reading such empty slot return `undefined` as usual. – Hux Dec 19 '19 at 00:52
52

Oddly enough, new Array(size) is almost 2x faster than [] in Chrome, and about the same in FF and IE (measured by creating and filling an array). It only matters if you know the approximate size of the array. If you add more items than the length you've given, the performance boost is lost.

More accurately: Array( is a fast constant time operation that allocates no memory, wheras [] is a linear time operation that sets type and value.

Eric Leschinski
  • 123,728
  • 82
  • 382
  • 321
gblazex
  • 45,901
  • 12
  • 91
  • 86
  • 3
    I've tested it much in Node.js: when you need to put some amount of items in array, `new Array(length)` on 0 <= size <= ~1000, on size > ~1000 wins `[]` – glukki Jun 21 '13 at 15:33
  • 1
    check this https://stackoverflow.com/questions/7375120/why-is-arr-faster-than-arr-new-array – Xsmael Sep 16 '17 at 17:01
42

For more information, the following page describes why you never need to use new Array()

You never need to use new Object() in JavaScript. Use the object literal {} instead. Similarly, don’t use new Array(), use the array literal [] instead. Arrays in JavaScript work nothing like the arrays in Java, and use of the Java-like syntax will confuse you.

Do not use new Number, new String, or new Boolean. These forms produce unnecessary object wrappers. Just use simple literals instead.

Also check out the comments - the new Array(length) form does not serve any useful purpose (at least in today's implementations of JavaScript).

Aliaksandr Sushkevich
  • 7,264
  • 6
  • 29
  • 36
BarelyFitz
  • 1,939
  • 13
  • 17
  • 3
    Crockford, also, says to use [] rather than new Array(). Unfortunately, he doesn't say why in the linked article. I assume it's just a matter of space and speed. http://javascript.crockford.com/code.html – Nosredna May 31 '09 at 16:48
  • 4
    Crockford's not a fan of the using the "new" keyword to create a new instance of an object in Javascript. In lectures he's stated it's his belief that it creates ambiguity and doesn't fit in well with Javascript's prototype style inheritance. He's specifically referring to user created object constructors, but given that belief, it's easy to see why he'd recommend you not use it with the built-ins as well when there's an alternative syntax. – Alan Storm May 31 '09 at 17:15
  • @Alan Storm: at least for Number, String, and Boolean he says "these forms produce unnecessary object wrappers", but I guess that wouldn't apply to Array. – BarelyFitz May 31 '09 at 19:10
10

In order to better understand [] and new Array():

> []
  []
> new Array()
  []
> [] == []
  false
> [] === []
  false
> new Array() == new Array()
  false
> new Array() === new Array()
  false
> typeof ([])
  "object"
> typeof (new Array())
  "object"
> [] === new Array()
  false
> [] == new Array()
  false

The above result is from Google Chrome console on Windows 7.

Peter Lee
  • 11,507
  • 7
  • 65
  • 97
  • 4
    but why is [] == [] or [] === [] false ? – anu Mar 05 '15 at 02:40
  • 5
    "An expression comparing Objects is only true if the operands reference the same Object." (source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) – srph Nov 20 '15 at 01:26
  • This answer cherry picks examples to imply that the two constructs are identical. Other posts on this page point out the differences, such as `Array(3)` or `new Array(3)` is not the same as `[3]`. – ggorlen Jun 04 '19 at 16:51
8

The first one is the default object constructor call. You can use it's parameters if you want.

var array = new Array(5); //initialize with default length 5

The second one gives you the ability to create not empty array:

var array = [1, 2, 3]; // this array will contain numbers 1, 2, 3.
Bogdan Gusiev
  • 7,447
  • 14
  • 59
  • 76
  • 1
    You can do the same thing with verbose constructor: var array = new Array(1, 2, 3); – nickf May 31 '09 at 12:15
  • So then I guess you can do `var array = [5]` using the square brackets but not using the constructor as `var array = Array(5)` makes an empty array of 5 elements. – cdmckay May 31 '09 at 16:31
  • cdmckay - that's incorrect. var a=[5] would be an array with a single item - the number five. – BarelyFitz May 31 '09 at 16:44
  • 2
    @BarelyFitz: That's what I said. In Bogdans' answer, he says that the constructor call can't be used to initalize an array, but he was wrong. My comment was merely to clarify that you can't use the constructor call to initialize an array of a single element. – cdmckay May 31 '09 at 16:52
  • 1
    @cdmckay: sorry, I misunderstood your comment. To clarify: new Array(arg) - if arg is numeric this creates an empty array with length=arg; new Array(arg1, arg2) - creates a new array and initializes the array elements. So if you want to create an array with one numeric element like [5], you cannot do it using new Array(5). But really you should never use new Array() so this is a moot point. – BarelyFitz May 31 '09 at 19:01
  • Also new Array('foo') would create an array with a single element, however, this can only be used when the arg is non-numeric. – BarelyFitz May 31 '09 at 19:02
  • I think it's Worth noting that `[1,2,3,4,5]` is almost as fast as `new Array(5)`, and latter is only preparing your storage... See http://jsperf.com/array-instanciation/2 and **read test cases** before complaining, bottom half is not doing same things as upper half of tests, there's also value assignments on last three cases. – Sampo Sarrala - codidact.org Oct 01 '14 at 21:22
5

I can explain in a more specific way starting with this example that's based on Fredrik's good one.

var test1 = [];
test1.push("value");
test1.push("value2");

var test2 = new Array();
test2.push("value");
test2.push("value2");

alert(test1);
alert(test2);
alert(test1 == test2);
alert(test1.value == test2.value);

I just added another value to the arrays, and made four alerts: The first and second are to give us the value stored in each array, to be sure about the values. They will return the same! Now try the third one, it returns false, that's because

JS treats test1 as a VARIABLE with a data type of array, and it treats test2 as an OBJECT with the functionality of an array, and there are few slight differences here.

The first difference is when we call test1 it calls a variable without thinking, it just returns the values that are stored in this variable disregarding its data type! But, when we call test2 it calls the Array() function and then it stores our "Pushed" values in its "Value" property, and the same happens when we alert test2, it returns the "Value" property of the array object.

So when we check if test1 equals test2 of course they will never return true, one is a function and the other is a variable (with a type of array), even if they have the same value!

To be sure about that, try the 4th alert, with the .value added to it; it will return true. In this case we tell JS "Disregarding the type of the container, whether was it function or variable, please compare the values that are stored in each container and tell us what you've seen!" that's exactly what happens.

I hope I said the idea behind that clearly, and sorry for my bad English.

Kholio
  • 183
  • 1
  • 5
  • 19
    It's amazing that such complete and utter nonsense has been voted up. The comparison between the arrays will be false no matter how you make them because it compares the object identity and they are different objects. Arrays have no value property. `[]` and `new Array()` is identical; `.value` will be `undefined` in both cases, and comparing them will always be false. – slikts Sep 30 '15 at 22:26
  • Agreed, this answer makes no sense and shows nothing. There is no such thing as `array.value`. and both `typeof []` and `typeof new Array()` return `object`. It's one of the reasons why there is a function called `Array.isArray` – gman Dec 19 '19 at 00:57
  • Well guys, I agree with you :) I wrote a complete nonsense at that time :). Now I've added the correct answer to the same question. Let me know what do you see. I really appreciate your opinions. – Kholio Jun 14 '20 at 15:24
4

There is no difference when you initialise array without any length. So var a = [] & var b = new Array() is same.

But if you initialise array with length like var b = new Array(1);, it will set array object's length to 1. So its equivalent to var b = []; b.length=1;.

This will be problematic whenever you do array_object.push, it add item after last element & increase length.

var b = new Array(1);
b.push("hello world");
console.log(b.length); // print 2

vs

var v = [];
a.push("hello world");
console.log(b.length); // print 1
Aniruddha
  • 3,226
  • 5
  • 23
  • 37
3

The first one is the default object constructor call.mostly used for dynamic values.

var array = new Array(length); //initialize with default length

the second array is used when creating static values

var array = [red, green, blue, yellow, white]; // this array will contain values.
miken32
  • 35,483
  • 13
  • 81
  • 108
Parth Raval
  • 3,325
  • 2
  • 20
  • 30
2

The difference of using

var arr = new Array(size);

Or

arr = [];
arr.length = size;

As been discussed enough in this question.

I would like to add the speed issue - the current fastest way, on google chrome is the second one.

But pay attention, these things tend to change a lot with updates. Also the run time will differ between different browsers.

For example - the 2nd option that i mentioned, runs at 2 million [ops/second] on chrome, but if you'd try it on mozilla dev. you'd get a surprisingly higher rate of 23 million.

Anyway, I'd suggest you check it out, every once in a while, on different browsers (and machines), using site as such

Xavier Egea
  • 4,448
  • 3
  • 23
  • 39
Meir Elad
  • 75
  • 1
  • 11
2

As I know the diference u can find the slice(or the other funcitons of Array) like code1.and code2 show u Array and his instances:

code1:

[].slice; // find slice here
var arr = new Array();
arr.slice // find slice here
Array.prototype.slice // find slice here

code2:

[].__proto__ == Array.prototype; // true
var arr = new Array();
arr.__proto__ == Array.prototype; // true

conclusion:

as u can see [] and new Array() create a new instance of Array.And they all get the prototype functions from Array.prototype

They are just different instance of Array.so this explain why [] != []

:)

sammy
  • 367
  • 3
  • 10
2

There is no big difference, they basically do the same thing but doing them in different ways, but read on, look at this statement at W3C:

var cars = ["Saab", "Volvo","BMW"];

and

var cars = new Array("Saab", "Volvo", "BMW");

The two examples above do exactly the same. There is no need to use new Array().
For simplicity, readability and execution speed, use the first one (the array literal method).

But at the same time, creating new array using new Array syntax considered as a bad practice:

Avoid new Array()

There is no need to use the JavaScript's built-in array constructor new Array().
Use [] instead.
These two different statements both create a new empty array named points:

var points = new Array();         // Bad
var points = [];                  // Good 

These two different statements both create a new array containing 6 numbers:

var points = new Array(40, 100, 1, 5, 25, 10); // Bad    
var points = [40, 100, 1, 5, 25, 10];          // Good

The new keyword only complicates the code. It can also produce some unexpected results:

var points = new Array(40, 100);  // Creates an array with two elements (40 and 100)

What if I remove one of the elements?

var points = new Array(40);       // Creates an array with 40 undefined elements !!!!!

So basically not considered as the best practice, also there is one minor difference there, you can pass length to new Array(length) like this, which also not a recommended way.

Alireza
  • 83,698
  • 19
  • 241
  • 152
  • Hi Alireza, are these copied and pasted from somewhere? Please add a link to the page where the text is copied from. See [this help center page](https://stackoverflow.com/help/referencing) for details. Thank you. – Pang May 29 '17 at 01:50
  • Useful for `new Array(40).fill(123)` – gman Dec 19 '19 at 01:00
2

I've incurred in a weird behaviour using [].

We have Model "classes" with fields initialised to some value. E.g.:

require([
  "dojo/_base/declare",
  "dijit/_WidgetBase",
], function(declare, parser, ready, _WidgetBase){

   declare("MyWidget", [_WidgetBase], {
     field1: [],
     field2: "",
     function1: function(),
     function2: function()
   });    
});

I found that when the fields are initialised with [] then it would be shared by all Model objects. Making changes to one affects all others.

This doesn't happen initialising them with new Array(). Same for the initialisation of Objects ({} vs new Object())

TBH I am not sure if its a problem with the framework we were using (Dojo)

algiogia
  • 785
  • 1
  • 12
  • 30
2

There's more to this than meets the eye. Most other answers are correct BUT ALSO..

new Array(n)

  • Allows engine to reallocates space for n elements
  • Optimized for array creation
  • Created array is marked sparse which has the least performant array operations, that's because each index access has to check bounds, see if value exists and walk the prototype chain
  • If array is marked as sparse, there's no way back (at least in V8), it'll always be slower during its lifetime, even if you fill it up with content (packed array) 1ms or 2 hours later, doesn't matter

[1, 2, 3] || []

  • Created array is marked packed (unless you use delete or [1,,3] syntax)
  • Optimized for array operations (for .., forEach, map, etc)
  • Engine needs to reallocate space as the array grows

This probably isn't the case for older browser versions/browsers.

Solo
  • 5,383
  • 3
  • 25
  • 57
2

Well, var x = new Array() is different than var x = [] is different in some features I'll just explain the most useful two (in my opinion) of them.

Before I get into expalining the differences, I will set a base first; when we use x = [] defines a new variable with data type of Array, and it inherits all the methods that belong to the array prototype, something pretty similar (but not exactly) to extending a class. However, when we use x = new Array() it initilizes a clone of the array prototype assigned to the variable x.

Now let's see what are the difference

The First Difference is that using new Array(x) where x is an integer, initilizes an array of x undefined values, for example new Array(16) will initialize an array with 16 items all of them are undefined. This is very useful when you asynchronously fill an array of a predefined length. For example (again :) ) let's say you are getting the results of 100 competitiors, and you're receiving them asynchronously from a remote system or db, then you'll need to allocate them in the array according to the rank once you receive each result. In this very rare case you will do something like myArray[result.rank - 1] = result.name, so the rank 1 will be set to the index 0 and so on.

The second difference is that using new Array() as you already know, instanciates a whole new clone of the array prototype and assigns it to your variable, that allows you to do some magic (not recommended btw). This magic is that you can overwrite a specific method of the legacy array methods. So, for example you can set the Array.push method to push the new value to the beginning of the array instead of the end, and you can also add new methods (this is better) to this specific clone of the Array Prototype. That will allow you to define more complex types of arrays throughout your project with your own added methods and use it as a class.

Last thing, if you're from the very few people (that I truly love) that care about processing overhead and memory consumption of your app, you'd never tough new Array() without being desperate to use it :).

I hope that has explained enough about the beast new Array() :)

Kholio
  • 183
  • 1
  • 5
-3

I've found one difference between the two constructions that bit me pretty hard.

Let's say I have:

function MyClass(){
  this.property1=[];
  this.property2=new Array();
};
var MyObject1=new MyClass();
var MyObject2=new MyClass();

In real life, if I do this:

MyObject1.property1.push('a');
MyObject1.property2.push('b');
MyObject2.property1.push('c');
MyObject2.property2.push('d');

What I end up with is this:

MyObject1.property1=['a','c']
MyObject1.property2=['b']
MyObject2.property1=['a','c']
MyObject2.property2=['d']

I don't know what the language specification says is supposed to happen, but if I want my two objects to have unique property arrays in my objects, I have to use new Array().

Bucky
  • 73
  • 1
  • 1
  • [This JSFiddle](http://jsfiddle.net/x8vx862r/1/) shows that the output is what you'd expect with the array literal `[]` and `new Array()` constructor resulting in one item per array per property. You must have something else going on in your code to end up with the result you show above. – gfullam Sep 24 '15 at 13:33
  • Bucky, that doesn't happen for me, in any browser. To get that behavior you'd have to do something like this: `var property1static=[];` `function MyClass(){ this.property1=property1static; this.property2=new Array(); };` – Dave Burton Jan 06 '16 at 18:50
-3

Using the Array constructor makes a new array of the desired length and populates each of the indices with undefined, the assigned an array to a variable one creates the indices that you give it info for.

  • 1
    No, array is NOT populated, there are no index/keys inside. For example .forEach would not work. – CFrei Jan 02 '16 at 13:31