2015-08-13 2 views
4

Если я исполняю ниже кода на хромированной консоли затем, я получил ответ, как ассоциативный массив:Странное ассоциативное поведение массива в JavaScript

var arr= []; 
var i = 1; 
for(var j = 1; j < 3; j++) 
    arr[j]=j;console.log(arr); 

Ans: [1: 1, 2: 2]

Но когда я выполняю с помощью узла: [ , 1, 2 ]

Почему это так отличается? Насколько я знаю, оба используют v8.

+0

почему ассоциативная? его нормальный массив –

ответ

5

Firefox говорит

Array [ <1 empty slot>, 1, 2 ] 

IE Край говорит

[object Array][undefined, 1, 2] 

и все они правильно

Chrome просто не сообщают пустой индекс 0

Узел показывает индекс 0 пуст

Firefox говорит вам именно то, что происходит

Попробуйте это:

var arr= [];var i = 1; for(var j = 1; j < 3; j++) arr[j*3]=j+3;console.log(arr); 

Firefox:

Array [ <3 empty slots>, 4, <2 empty slots>, 5 ] 

Узел

[ , , , 4, , , 5 ] 

IE Грань

[object Array][undefined, undefined, undefined, 4, undefined, undefined, 5] 

Chrome

[3: 4, 6: 5] 
+0

В чем причина такого странного поведения? – hectk

+0

@tehect * Weird *? Ясность для меня. Намного легче, чем чтение IE Edge's – CodingIntrigue

+0

Это не странно. Консоль не является частью стандарта ecmascript, как разреженные массивы регистрируются на консоли, зависит от реализации ... не беспокойтесь об этом, все эти массивы будут вести себя одинаково –

Смежные вопросы