Obiekty JSON.stringify () i JavaScript


Myślę, że może przegapiłem coś w JavaScript, co dopiero teraz zbieram.
Próbowałem tego kodu w Console Chrome:
a = [];
a.name = "test";
JSON.stringify(a);
// which returns value []
a = new Object();
a.name = "test";
JSON.stringify(a);
// which returns value {"name":"test"}

Co za różnica?
Myślałem, że nowy Object () to JScript Microsoftu? czego mi brakuje?
Musiał gdzieś przeoczyć coś w specyfikacji. Podziękować.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

a = new Object()

i
a = []

nie są równoważne. Ale,
a = {}

i
a = new Object()

są.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

new Object ()
jest równoważne z
{}
(z wyjątkiem przypadków, gdy nie wiąże się to z dziwnymi problemami z przesłonięciem - ale na razie zignoruj ​​to)
[]
jest odpowiednikiem
new Array ()
, do którego następnie dodajesz właściwość
.name
. JSON skanuje tablice w specjalny sposób, który nie przechwytuje dowolnych przypisań właściwości do samej tablicy. [/code]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W przypadku danych JSON tablice muszą mieć indeksy liczbowe, a obiekty muszą być parami klucz/wartość.
a = [];
a[ 0 ] = "test";JSON.stringify(a);// returns value ["test"]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Tak, używasz
[]
do zdefiniowania swojego obiektu, który w rzeczywistości jest tablicą, ale w zależności od języka, z którego pochodzisz, może to być mylące, ponieważ nie jest to tablica asocjacyjna.
Domyślnymi obiektami są wszystkie klucze kart danych - & > i są tworzone za pomocą nawiasów klamrowych
{}
Jeśli tak
a = {};
a.name = "test";
JSON.stringify(a);

To powinno działać.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ustawienie właściwości
name
tablicy nie robi nic z jej serializowanym (ciągiem JSON) formularzem. Nie umieszcza wpisu w tablicy. W tym celu potrzebujesz
a.push ('test')
.
Obiekty są standardowymi częściami JavaScript (patrz na przykład

MDC docs
https://developer.mozilla.org/ ... Object). typowym sposobem tworzenia obiektu jest
{}
, ale
new Object ()
też działa.
Więc...
var a = [];
a.push('test');
JSON.stringify(a);//"["test"]"a = {};
a.name = 'test';
JSON.stringify(a);//"{"name":"test"}"

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się