próbuję następujący kod w ideone:Czy długość tablicy tablicowej Array.pop()?
var a = [];
a[0] = 0;
a[5] = 5;
a[6] = undefined;
print("contents before popping:");
for(var e in a) print("\ta[", e, "] =", a[e]);
print("a.length =", a.length);
for (var i = 0; i < a.length; i++)
print("\ta.hasOwnProperty(", i, ") =", a.hasOwnProperty(i));
print("popping -->", a.pop());
print("popping -->", a.pop());
print("contents after popping:");
for(var e in a) print("\ta[", e, "] =", a[e]);
print("a.length =", a.length);
for (var i = 0; i < a.length; i++)
print("\ta.hasOwnProperty(", i, ") =", a.hasOwnProperty(i));
Wyjście przechodzi w następujący sposób:
contents before popping:
a[ 0 ] = 0
a[ 5 ] = 5
a[ 6 ] = undefined
a.length = 7
a.hasOwnProperty(0) = true
a.hasOwnProperty(1) = false
a.hasOwnProperty(2) = false
a.hasOwnProperty(3) = false
a.hasOwnProperty(4) = false
a.hasOwnProperty(5) = true
a.hasOwnProperty(6) = true
popping --> undefined
popping --> 5
contents after popping:
a[ 0 ] = 0
a.length = 5
a.hasOwnProperty(0) = true
a.hasOwnProperty(1) = false
a.hasOwnProperty(2) = false
a.hasOwnProperty(3) = false
a.hasOwnProperty(4) = false
w mojej książce JavaScript (dobrze, Crockforda'S) Czytałem długość tej tablicy jest obliczana jako największy wartość liczbowa wszystkich właściwości. Dlaczego mówi się, że długość wynosi 5, gdy największą właściwością liczbową jest 0? Dzięki!
Przekazywałem to skrzypce, aby pokazać, kiedy Array.length jest niewiarygodna, oprócz twojego przykładu. http://jsfiddle.net/6WrkT/1/ –