11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

apparament avec la boucle for… in on peux
parcourir toutes les propriétés d'un objet
comme cela

for (var propriete in document) {
document.write(propriete, " = ",
document[propriete], "<br />");
}


mais comment parcourir toute les propriétés d'un objet string ?

Comme cela par exemple


var objetString = 'test';
for (var propriete in objetString) {
document.write(propriete, " = ",
objetString[propriete], "<br />");
}
Bonjour perfectionniste,

je crois que tu confonds :
--> objet ou instance,
--> propriété
--> méthode

Un objet (ou instance) contient soit des propriétés soit des méthodes ou soit d'autres objets.
Une propriété, c'est une donnée.
Une méthode, c'est une fonction.

On les nomme ainsi car elles appartiennent à l'objet et l'on ne peut y accéder qu'en préfixant la propriété ou la méthode par l'objet conteneur.

En faisant "for (indice in objet)", indice récupère tout ce qui se trouve dans objet, c'est à dire d'autres objets, les propriétés et les méthodes.

Si tu fais "for (indice in propriété)", tu ne récupère rien du tout car propriété n'est pas un objet.

Donc ta question n'a pas de sens, puisque dans ton exemple "var objetString = 'test';", objetString est une propriété.

@+
Merci pour cette réponse, dans ce cas :

comment parcourir les méthodes et les propriétés de l'objet qui a la valeur de ma variable dans sa propriété dont je connais pas le non d'ailleurs.
En écrivant:


var objetString = 'test';


objetString devient un objet descendant de l'objet global "string".

Cela dit, en faisant une boucle for in, tu boucle sur les propriétés et les méthodes "ajoutées" à cet objet (ainsi que sur les méthodes ajoutés à son prototype de base). Dans le cas de ton objet objetString, tu y as assigné une chaine de caractère, et tu récupéreras l'index de chacune des lettres (en théorie, tu obtiens présentement: 0, 1, 2, 3).

Par contre, si tu faisais cela:


var objectString = 'test';

String.prototype.console = function () {
  console.log('une méthode bidon');
}

for(var a in objectString) {
  console.log(a);
  // ou ainsi pour obtenir les valeurs des index
  // console.log(objectString[a]);
}


À ce moment, la méthode console est aussi listé. Il faut donc être prudent avec la boucle for in, et veillez à seulement utiliser ses propres propriétés ainsi:


var objectString = 'test';

String.prototype.console = function () {
  console.log('une méthode bidon');
}

for(var a in objectString) {
  if ( objectString.hasOwnProperty(a) ) {
    console.log(objectString[a]);
  }
}


Mais au final, tu peux seulement obtenir les propriétés ou les méthodes que tu as ajouté, et non celles qui sont natives aux objets de base en Javascript.

Pour ceux-ci, tu peux tester leur existence ainsi:


if ( typeof Array.prototype.push === 'function' ) {
  // do something
}


Mais à ma connaissance, tu ne peux pas boucler sur ces derniers.