Domanda

I seguenti due diversi frammenti di codice mi sembrano equivalenti:

var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";

E

var myObject = {'A': 'Athens', 'B':'Berlin'};

perché entrambi si comportano allo stesso modo, e anche typeof(myArray) == typeof(myObjects) (entrambi producono 'oggetto').

C'è qualche differenza tra queste varianti?

Altri suggerimenti

In array JS sono oggetti, solo leggermente modificato (con qualche altra funzione).

Le funzioni come:

concat
every   
filer
forEach
join
indexOf
lastIndexOf
map
pop
push
reverse
shift
slice
some
sort
splice
toSource
toString
unshift
valueOf 

Me pensa, anche a me metaforico e criptico con risposta precedente. Chiarimento segue.

Un esempio di Array, booleano, data, Funzione, Numero, RegExp, String è un oggetto, ma potenziato con metodi e proprietà specifiche per ogni tipo. Ad esempio, un array ha un predefinito length proprietà mentre oggetti generici non lo fanno.

javascript:alert([].length+'\n'+{}.length)

display

0
undefined

intrinseca, l'interprete FF Gecko distingue anche tra array e gli oggetti generici con chiare differenze di valutazione costrutti del linguaggio.

javascript:
  ra=[  "one",   "two",   "three"]; ra.a=4;
  ob={0:"one", 1:"two", 2:"three"}; ob.a=4;
  alert(
    ra            +"\n\n"+
    ob            +"\n\n"+
    ra.toSource() +"\n\n"+
    ra.a          +"\t .toSource() forgot me! \n\n"+
    ra.length     +"\t and my length! \n\n"+
    ob.toSource());
  ps=""; for(i in ra)ps+=i+" "; alert(ps);  /* NB .length is missing! */
  ps=""; for(i in ob)ps+=i+" "; alert(ps);

visualizzazione

one,two,three

[object Object]

["one", "two", "three"]

4    .toSource() forgot me! 

3    and my length! 

({0:"one", 1:"two", 2:"three", a:4})

e 0 1 2 a e 123().

Per quanto riguarda l'affermazione che tutti gli oggetti sono funzioni:

Si è né sintatticamente né semanticamente corretto utilizzare un'istanza oggetto arbitrario come una funzione come "abc"() o []() o {}() o obj() o obj dove Function è un tipo diverso da <= >, quindi un oggetto GRADO arbitrario non è un Array, Boolean, Date, .... Tuttavia, dato un oggetto function ed è di tipo Math, come ha fatto JSON venuto per essere come un true? Che cosa è un .toSource()?

javascript:
    alert([Array, Boolean, Date, Function, 
              Number, Object, RegExp, String] . join('\n\n') );

display

function Array() {
    [native code]
}

function Boolean() {
    [native code]
}

function Date() {
    [native code]
}

function Function() {
    [native code]
}

function Number() {
    [native code]
}

function Object() {
    [native code]
}

function RegExp() {
    [native code]
}

function String() {
    [native code]
}

In ogni caso, senza equivoci, il tipo di oggetto manifesta come una definizione function Function() { [native code] }, quindi l'affermazione che tutti gli oggetti sono funzioni! (La lingua-in-cheek è che ho volutamente oscurata e confuso la distinzione di un'istanza di un oggetto con quella del suo tipo! Eppure, questo dimostra "non si può avere l'uno senza l'altro", oggetto e funzione! Capitalizzazione sottolinea tipo come al contrario di esempio.)

Sia un paradigma funzionale ed oggetto sembra essere fondamentale per la programmazione e l'attuazione del interprete basso livello JS primitive incorporate, come function Object() { [native code] } e eval() e <=>.

 javascript:alert([Math, JSON, true.toSource()].join("\n\n"));

display

[object Math]

[object JSON]

(new Boolean(true))

Al momento dello sviluppo di Javascript, uno stile di programmazione object-centric (di OOP - Object Oriented stile di programmazione - la "s '" è il mio gioco di parole) era in voga e l'interprete è stato similmente battezzata con Java per dare maggiore credibilità. tecniche di programmazione funzionali sono stati relegati ad esami più astratti ed esoterici che studiano le teorie di automi, funzioni ricorsive, linguaggi formali, ecc e come tali non come appetibile. Tuttavia, i punti di forza di queste considerazioni formali sono chiaramente manifesta nella Javascript in particolare per quanto implementato nel motore Gecko di FF (es. <=>).


La definizione oggetto per la funzione è particolarmente soddisfacente per esso è definito come una relazione di ricorrenza! definita utilizzando il proprio definizione!

<=>
e dal momento che una funzione è un oggetto lo stesso sentimento vale per
<=>.

La maggior parte delle altre definizioni Quiesce ad un valore terminale statico. Tuttavia, è un <=> particolarmente potente funzionalità arbitraria primitivo e quindi una stringa può anche incorporare.

Nota nuovamente, volgare utilizzato sopra oscura tipo di oggetto e distinzione esempio.

Tutto in JavaScript è un oggetto oltre i tipi primitivi.

Il codice

var myArray = Array();

crea un'istanza dell'oggetto Array mentre

var myObject = {'A': 'Athens', 'B':'Berlin'};

crea un'istanza di oggetto oggetto.

Prova il seguente codice

alert(myArray.constructor)
alert(myObject.constructor)

Quindi, si vedrà la differenza è nel tipo di costruttore dell'oggetto.

L'istanza dell'oggetto Array conterrà tutte le proprietà ei metodi del prototipo Array.

Una differenza pratica è quando si utilizza JSON.stringify su un array tutto non numerico gli indici vengono ignorate:

var arr = [];
var obj = {};

arr['name'] = 'John';
obj['name'] = 'John';

console.log(arr);    // will output [name: "John"]
console.log(obj);    // will output {name: "John"}

JSON.stringify(arr); // will return []
JSON.stringify(obj); // will return {"name":"John"}

La differenza tra gli array e gli altri oggetti in JavaScript.Sebbene gli array abbiano una proprietà di lunghezza che si aggiorna magicamente, per oggetti diversi dagli array non c'è modo di implementare tale proprietà.

var arrName = [];
arrName[5] = "test";
arrName.length; // <- 6

Gli array vengono utilizzati per archiviare elementi con un indice ordinale: utilizzali come un array, uno stack o una coda tradizionali.Un oggetto è un hash: usalo per i dati che hanno una chiave distinta.

Il {} - notazione è solo zucchero sintattico per rendere il codice più bello; -)

JavaScript ha molti costrutti simili come la costruzione di funzioni, in cui la funzione () è solo un sinonimo di

var Func = new Function("<params>", "<code>");
scroll top