J'ai un problème js très étrange. J'ai un composant Vue (mais je ne pense pas que Vue soit importante ici). Il possède un attribut de données appelé current_query
. Dans la méthode qui répond à l'événement, je souhaite modifier la propriété. Utilisez Lodash ici. Il y a un comportement très étrange. Supposons que this.current_query
soit initialement égal à { test : 500 }
. Supposons que le paramètre 'field'
soit 'test'
. En le "désactivant" de current_query
, je vais en fait effacer current_query lui-même. très bien. Le problème est que, uniquement lors de l'utilisation de unset, si j'enregistre current_query avant d'appeler unset, j'obtiens un objet vide. Comment se peut-il?
on_applied_option_click(field){ console.log(this.current_query); // donne { test : 500 } (OK) }, // Cliquez pour terminer on_applied_option_click(champ){ console.log(this.current_query); // Ce n'est qu'en utilisant _.unset qu'un objet vide sera donné (??) _.unset(this.current_query, champ); console.log(this.current_query); // Donnera également un objet vide (OK) }, // Cliquez pour terminer
J'ai constaté que si j'utilise _.omit
, tout fonctionne correctement :
on_applied_option_click(field){ console.log(this.current_query); // donne { test : 500 } (OK) this.current_query = _.omit(this.current_query, champ); console.log(this.current_query); // Donne un objet vide, ce qui est OK pour le moment }, // Cliquez pour terminer
Pourquoi ? La seule chose que je peux dire, c'est que _.unset modifie l'objet tandis que _.omit crée de nouveaux objets. Cependant, je ne pense pas qu'il soit possible pour _.unset de modifier l'objet avant de l'appeler (???). Je n'ai jamais rien vu de pareil. Quelqu'un a-t-il une bonne explication à ce comportement étrange ?
N'utilisez pas
console.log(this.current_query)
,尝试使用console.log(JSON.stringify(this.current_query))
。这样可以可靠地记录this.current_query
l'état au moment de l'enregistrement, plutôt qu'un éventuel état ultérieur.Cela devrait résoudre le problème de confusion.