1
votes

Différence entre object.key et object [key] dans la boucle for en JavaScript

Pourquoi après avoir remplacé if (typeof obj [key] == 'object') par if (typeof obj.key == 'object') le résultat est ne vous attendez pas. voici mon code:

var animals = {
  bird: {
    color: 'blue',
    action: {
      fly: true,
      nesting: true,
      swim:false
    },
    eat:'insect'
  }
};
function GetObjectKeys(obj, keys) {
 for (let key in obj) {
     //if (typeof obj.key == 'object')
       if (typeof obj[key] == 'object') 
  {
           keys.push(key);
           GetObjectKeys(obj[key], keys);
       } 
else {
           keys.push(key);
       }
   }
   return keys;
}
arrKeys = [];
GetObjectKeys(animals, arrKeys); 

//
- result expect:
[
  'bird',    'color',
  'action',  'fly',
  'nesting', 'swim',
  'eat'
]
- result when use if (typeof obj.key == 'object') :
[ 'bird' ]

Merci!


2 commentaires

Bienvenue dans StackOverflow! Vous devrez coller ici les résultats que vous voyez, puis les résultats que vous attendez de voir. Cela nous aidera à déterminer ce que vous essayez de faire.


Lorsque vous utilisez obj.keys , il recherche une propriété nommée littéralement "key" À L'INTÉRIEUR de l'objet. MAIS il n'y en a pas avec ce nom! Plus d'infos: Est-il possible d'ajouter dynamiquement nommé propriétés à l'objet JavaScript?


4 Réponses :


1
votes

La clé de votre exemple de notation par points ( obj.key ) est une chaîne, votre obj ne possède pas la propriété nommée < strong> key , il n'est donc pas défini.

Vous passez une variable dans votre notation entre crochets, for (let key in obj) boucle tous les noms de propriété dans votre objet obj . Donc, obj [clé] équivaut essentiellement à obj ['oiseau'] de votre premier appel de fonction.


0 commentaires

1
votes

Réponse

La façon dont je le vois, lorsque vous utilisez for ... dans l'expression , key est la clé avec le type de chaîne. comme "key1","key2","key3'

donc, lorsque vous utilisez la clé comme obj.key , c'est comme obj. "clé . Il se produit donc une erreur.

afin que vous puissiez utiliser des clés de propriété dynamiques telles que obj [key] .

Référence


0 commentaires

0
votes

utiliser obj [key] est préférable pour ce type d'utilisation. Regardez ici:

var obj = {key: 1, key2: 2}
var key = 'key2';

obj.key = 3;
obj[key] = 4; // result: {key: 3, key2: 4}


0 commentaires

1
votes
  • obj.key equal obj ["key"] recherchera "key" comme propriété dans votre objet, et évidemment là n'est pas une propriété key dans animaux object ==> obj.key égal à obj ["key"] est < code> indéfini . ==> vous avez obtenu un résultat inattendu.
  • obj [key] prend dynamiquement la valeur de key pour passer la notation. Par exemple, const key = "name" => obj [key] égal à obj.name . C'est "oiseau" dans votre cas obj [clé] égal à obj ["oiseau"] égal à obj.bird

0 commentaires