eval(); //Cette méthode n'est pas recommandée
JSON.parse(); //Méthode recommandée
1. La différence entre les deux méthodes
On initialise d'abord un objet au format json :
var jsonDate = '{ "name":"周星驰","age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法
Puis appelez dans la console :
console.log( jsonObj.name ); // Les deux méthodes peuvent être saisies correctement Stephen Chow
Alors la question est : quelle est la différence entre les deux méthodes ? (Modifions légèrement le code ci-dessous, la police bleue est la partie modifiée)
var jsonDate = '{ "name":alert("hello"),"age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23
Remplacez la méthode "JSON.parse();" :
var jsonDate = '{ "name":alert("hello"),"age":23 }' var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法 cosole.log( jsonobj.age ) // 报错 这个错误告诉我们这个字符串是不合法的
Résumé : La méthode "eval();" ne déterminera pas si la chaîne est légale lors de l'analyse, et la méthode js dans l'objet json sera également exécutée, ce qui est très dangereux et "JSON.parse(); "Inutile de dire les avantages de cette méthode, cette méthode est recommandée. (Les amis qui ne comprennent pas peuvent le tester eux-mêmes sur la console)
2. Problèmes d'expansion
Vous pouvez voir que dans le test ci-dessus, les guillemets à l'extérieur des accolades ont été marqués en rouge. Cette paire de guillemets est très critique mais est souvent ignorée, car "eval();" ();" Les paramètres de ces deux méthodes n'acceptent que les chaînes, ce qui signifie qu'elles ne peuvent analyser que les chaînes !!
Ensuite, j'ai une pensée. Si nous n'ajoutons pas de guillemets lors de l'initialisation, alors c'est lui-même un objet, et js peut directement obtenir les propriétés et les méthodes de l'objet lui-même, pourquoi devons-nous ajouter des guillemets ; transformez-le en caractères ? Utilisez ensuite "eval();" ou "JSON.parse();" pour analyser la chaîne. N'est-ce pas ni respectueux de l'environnement ni efficace ?
La raison est très simple : le front-end ne peut fournir qu'un format de données de chaîne au back-end. Ce que le back-end renvoie au front-end dépend du format de données renvoyé. S'il s'agit d'une chaîne, cela dépend du format de données renvoyé. doit être analysé avant utilisation.
(C'est un petit problème que tout le monde ignore généralement et auquel on n'y prête pas beaucoup d'attention. La raison pour laquelle je suis curieux est que je n'en sais pas assez sur le backend. Je poste cette question dans l'espoir qu'elle sera utile aux amis qui ne connaissent pas le backend et savent comment il fonctionne. Cela approfondira naturellement votre mémoire après l'incident, vous ne le manquerez donc pas pendant le processus de développement)
Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.