Действительно ли массивы действительно «разбиты» в JavaScript по умолчанию? - PullRequest
2 голосов
/ 25 декабря 2011

Действительно ли массивы действительно "разбиты" в JavaScript по умолчанию?

Как удалить отдельный элемент массива без смещения индекса?

В чем разница между:

var a = new Array(10);
var b = new Array(2);

занимают ли эти массивы различное пространство в памяти?Могу ли я превратить Array(2) в Array(10) и обратно?

ОБНОВЛЕНИЕ 1

Следующий код

<body>
<script type="text/javascript">

    var a = new Array(10);
    var b = new Array(2);

    document.write('a[5] is ' + a[5] + '<br/>');
    document.write('a[15] is ' + a[15] + '<br/>');
    document.write('a.length is ' + a.length + '<br/>');
    document.write('b[5] is ' + b[5] + '<br/>');
    document.write('b[15] is ' + b[15] + '<br/>');
    document.write('b.length is ' + b.length + '<br/>');

    b[9]=12;
    delete b[9];

    document.write('After resize...<br/>');
    document.write('b[5] is ' + b[5] + '<br/>');
    document.write('b[15] is ' + b[15] + '<br/>');
    document.write('b.length is ' + b.length + '<br/>');

</script>
</body>

вернет

a[5] is undefined
a[15] is undefined
a.length is 10
b[5] is undefined
b[15] is undefined
b.length is 2
After resize...
b[5] is undefined
b[15] is undefined
b.length is 10

Итак, я сделал b, обладающие теми же свойствами, что и a.Могу ли я сделать это без присвоения фальшивого значения b[9]?Могу ли я сделать реверс, то есть, если a.length равен 2?

Ответы [ 2 ]

4 голосов
/ 25 декабря 2011
  1. Да, массивы по умолчанию разрежены. Их свойства даже не определены. Вы можете проверить это с помощью этого кода:

    var arr = new Array(10);
    for(var x in arr) {
        alert(x); // Never alerts a number
    }
    
  2. Чтобы удалить отдельный элемент, используйте delete:

    delete arr[5]; // Deletes element 6.
    
  3. Память, вероятно, не имеет значения, и разные движки будут обращаться с ней по-разному. Я не думаю, что можно ответить точно. Что касается изменения размеров, массивы JavaScript не имеют фиксированных размеров . Это совершенно законно:

    var arr = new Array(2);
    arr[5] = "Hello!";
    

Вы можете узнать больше о JavaScript в целом на http://developer.mozilla.com/. Массивы - это просто объекты с некоторыми дополнительными специальными свойствами. На самом деле у него не столько индексы, сколько ключи.

1 голос
/ 25 декабря 2011

Да, индексы - это обычные свойства объекта.

Если я сделаю ...

var array = new Array();
array[1000] = null;

... к массиву добавлено только одно свойство, хотя length будет обновлено до 1001.


Чтобы удалить один без переиндексации, используйте delete.

delete a[5];

Два массива в вашем примере являются уникальными объектами. Не уверен, что ты имеешь в виду, превращая одного в другого.

...