2012-08-04 16 views
8

Możliwe zduplikowane:
What is “undefined x 1” in JavaScript?Jaka jest różnica między [niezdefiniowanym] a [,]?

Chrome 21, karmiąc [,] do wyjść konsoli

[zdefiniowana x 1]

i karmy [undefined] wyjścia

[zdefiniowana]

co stanowi różnicę pomiędzy [undefined] i [undefined x 1]?

Co to jest oznaczenie [undefined x 1]?

+4

wierzę, musisz przeczytać ten [LINK] (http://stackoverflow.com/questions/10683773/what-is-undefined-x-1-in-javascript) –

+0

'[]' dostaje mnie '[]' ... – pimvdb

+2

Dane wyjściowe konsoli nie są danymi, a to nie * (koniecznie) * notacja JavaScript lub składnia. To wizualna reprezentacja danych, ponieważ twórcy konsol zdecydowali, że powinna wyglądać. Czasami jest to pomocne, czasami może być mylące lub mylące. –

Odpowiedz

11

[,] to sparse array. Ma długość 1, ale nie ma wartości (0 in [,] === false). Można go również zapisać jako new Array(1).

[undefined] to tablica o długości 1 o wartości undefined o indeksie 0.

Podczas uzyskiwania dostępu do właściwości "0", oba zwrócą undefined - pierwszą, ponieważ ta własność nie jest zdefiniowana, druga z powodu wartości "nieokreślona". Jednak tablice są różne, podobnie jak ich output in the console.

-1

Wygląda na to, że jest to skrótowy sposób wyświetlania powtarzających się "niezdefiniowanych" wartości. np:

> [,,,] 
    [ undefined x 3 ] 

Ale [] nie jest taka sama jak [undefined] w ogóle. Sprawdziłbym to dokładnie, gdybym był tobą.

+0

Proszę ponownie przeczytać moje pytanie. Pytam o '[,]', a nie '[]'. – Randomblue

+0

Wyjaśnienie edytora pimvdb: http://es5.github.com/#x11.1.4, "Jeśli element zostanie usunięty na końcu tablicy, ten element nie przyczynia się do długości tablicy." –

+0

@Randomblue dobrze tak, skoro to zredagowałeś ..: - \ – nickf

0

Ów nieparzyste [] wyjść tylko [] znowu dla mnie na Chrome 21.

Zresztą [a, b, c, ...] jest notacja tablicą JavaScript, dzięki czemu są w zasadzie definiowania tablicę bez wartości.

Koniec końcówki , można zaakceptować, aby ułatwić generowanie macierzy. Więc Chrome mówi, że w tablicy jest jedna niezdefiniowana wartość. Zobacz kod przykładów.

[,,] 
> [undefined x2] 
[1,2,] 
> [1, 2] 
[1,2,,] 
> [1, 2, undefined × 1] 
[1,2,,,] 
> [1, 2, undefined × 2] 
[1,2,,3,4,,,6] 
> [1, 2, undefined × 1, 3, 4, undefined × 2, 6] 
+1

Wartości są niezdefiniowane, ponieważ nie istnieją; nie są ustawione na "niezdefiniowane". A JavaScript może obsługiwać takie tablice doskonale. – pimvdb

+0

Która definicja jest niezdefiniowana. Czym dokładnie jest problem? – dualed

+0

Problem stanowi sformułowanie, które nie jest zbyt dokładne. Edytowałem, jeśli nie masz nic przeciwko. – pimvdb

5

[,] tworzy tablicę o długości 1 i bez indeksów.

[undefined] tworzy tablicę o długości 1 z wartością undefined na indeksie 0.

Chrome undefined × x jest dla nielicznych tablic, które nie mają indeksy sekwencyjnej:

var a = []; 

a[8] = void 0; //set the 8th index to undefined, this will make the array's length to be 9 as specified. The array is sparse 
console.log(a) //Logs undefined × 8, undefined, which means there are 8 missing indices and then a value `undefined` 

Jeśli było użyć .forEach na rozrzedzony tablicy, to pomija indeksy, które nie istnieją.

a.forEach(function() { 
    console.log(true); //Only logs one true even though the array's length is 9 
}); 

Gdzie niby zrobić normalne .length oparciu o pętlę:

for (var i = 0; i < a.length; ++i) { 
    console.log(true); //will of course log 9 times because it's only .length based 
} 

Jest haczyka jeśli oczekujesz .forEach zachowywać się tak samo jak nietypowych wdrożeniach.

new Array(50).forEach(function() { 
    //Not called, the array doesn't have any indices 
}); 

$.each(new Array(50), function() { 
    //Typical custom implementation calls this 50 times 
}); 
Powiązane problemy