Come faccio a enumerare le proprietà di un oggetto JavaScript?




7 Answers

Utilizza un ciclo for..in per enumerare le proprietà di un oggetto, ma fai attenzione. L'enumerazione restituirà proprietà non solo dell'oggetto che viene enumerato, ma anche dei prototipi di qualsiasi oggetto padre.

var myObject = {foo: 'bar'};

for (var name in myObject) {
  alert(name);
}

// results in a single alert of 'foo'

Object.prototype.baz = 'quux';

for (var name in myObject) {
  alert(name);
}

// results in two alerts, one for 'foo' and one for 'baz'

Per evitare di includere proprietà ereditate nell'enumerazione, controlla hasOwnProperty() :

for (var name in myObject) {
  if (myObject.hasOwnProperty(name)) {
    alert(name);
  }
}

Modifica: non sono d'accordo con l'affermazione di JasonBunting che non dobbiamo preoccuparci di enumerare le proprietà ereditate. Esiste il pericolo di enumerare le proprietà ereditate che non ci si aspetta, poiché può modificare il comportamento del codice.

Non importa se questo problema esiste in altre lingue; il fatto è che esiste e JavaScript è particolarmente vulnerabile poiché le modifiche al prototipo di un oggetto interessano oggetti figlio anche se la modifica avviene dopo l'istanziazione.

Questo è il motivo per cui JavaScript fornisce hasOwnProperty() , ed è per questo che dovresti usarlo per assicurarti che il codice di terze parti (o qualsiasi altro codice che possa modificare un prototipo) non infrange il tuo. Oltre all'aggiunta di alcuni byte in più di codice, non esiste uno svantaggio nell'utilizzo di hasOwnProperty() .

javascript properties

Questa domanda ha già una risposta qui:

Come faccio a enumerare le proprietà di un oggetto JavaScript?

In realtà voglio elencare tutte le variabili definite e i loro valori, ma ho imparato che la definizione di una variabile crea effettivamente una proprietà dell'oggetto finestra.







for (prop in obj) {
    alert(prop + ' = ' + obj[prop]);
}



L'ho trovato ... for (property in object) { // do stuff } elencherà tutte le proprietà e quindi tutte le variabili dichiarate globalmente sull'oggetto window.




Ecco come enumerare le proprietà di un oggetto:

var params = { name: 'myname', age: 'myage' }

for (var key in params) {
  alert(key + "=" + params[key]);
}



Puoi usare il ciclo for .

Se vuoi usare un array:

Object.keys(object1)

Ref. Object.keys(obj)




Sono ancora un principiante in JavaScript, ma ho scritto una piccola funzione per stampare in modo ricorsivo tutte le proprietà di un oggetto e dei suoi figli:

getDescription(object, tabs) {
  var str = "{\n";
  for (var x in object) {
      str += Array(tabs + 2).join("\t") + x + ": ";
      if (typeof object[x] === 'object' && object[x]) {
        str += this.getDescription(object[x], tabs + 1);
      } else {
        str += object[x];
      }
      str += "\n";
  }
  str += Array(tabs + 1).join("\t") + "}";
  return str;
}





Related