foo = []
создает новый массив и присваивает ему ссылку на переменную. Любые другие ссылки не затрагиваются и все еще указывают на исходный массив.
foo.length = 0
изменяет сам массив. Если вы обращаетесь к нему через другую переменную, вы все равно получаете модифицированный массив.
Где-то читал, что второй создает новый массив, уничтожая все ссылки на существующий массив
Это назад. Он создает новый массив и не уничтожает другие ссылки.
var foo = [1,2,3];
var bar = [1,2,3];
var foo2 = foo;
var bar2 = bar;
foo = [];
bar.length = 0;
console.log(foo, bar, foo2, bar2);
дает:
[] [] [1, 2, 3] []
arr.length =0;// expected to empty the array
и он очищает массив, по крайней мере, в первый раз. После первого раза вы делаете это:
arr = arr + $(this).html();
… который переписывает массив строкой .
Свойство length
строки доступно только для чтения, поэтому присвоение ей 0
не имеет значения.