eval(); //Diese Methode wird nicht empfohlen
JSON.parse(); //Empfohlene Methode
1. Der Unterschied zwischen den beiden Methoden
Wir initialisieren zunächst ein Objekt im JSON-Format:
var jsonDate = '{ "name":"周星驰","age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法
Dann rufen Sie in der Konsole auf:
console.log( jsonObj.name ); // Beide Methoden können korrekt eingegeben werden Stephen Chow
Dann stellt sich die Frage: Was ist der Unterschied zwischen den beiden Methoden? (Ändern wir den Code unten leicht, die blaue Schriftart ist der geänderte Teil)
var jsonDate = '{ "name":alert("hello"),"age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23
Ersetzen Sie die Methode „JSON.parse();“:
var jsonDate = '{ "name":alert("hello"),"age":23 }' var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法 cosole.log( jsonobj.age ) // 报错 这个错误告诉我们这个字符串是不合法的
Zusammenfassung: Die Methode „eval();“ bestimmt beim Parsen nicht, ob die Zeichenfolge zulässig ist, und die js-Methode im JSON-Objekt wird ebenfalls ausgeführt, was sehr gefährlich ist und „JSON.parse();“ „Unnötig zu erwähnen, dass die Vorteile dieser Methode sehr empfehlenswert sind. (Freunde, die es nicht verstehen, können es selbst auf der Konsole testen)
2. Erweiterungsprobleme
Sie können sehen, dass im obigen Test die Anführungszeichen außerhalb der geschweiften Klammern rot markiert wurden. Dieses Anführungszeichenpaar ist sehr wichtig, wird jedoch häufig ignoriert, da „eval();“ ();" Die Parameter dieser beiden Methoden akzeptieren nur Zeichenfolgen, was bedeutet, dass sie nur Zeichenfolgen analysieren können!!
Dann habe ich einen Gedanken. Wenn wir beim Initialisieren keine Anführungszeichen hinzufügen, ist es selbst ein Objekt, und js kann die Eigenschaften und Methoden des Objekts selbst direkt abrufen in Zeichen umwandeln? Dann verwenden Sie „eval();“ oder „JSON.parse();“
Der Grund ist ganz einfach: Das Front-End kann dem Back-End nur ein String-Datenformat bereitstellen. Was das Back-End an das Front-End zurückgibt, hängt vom zurückgegebenen Datenformat ab muss vor der Verwendung analysiert werden.
(Dies ist ein kleines Problem, das im Allgemeinen jeder ignoriert und dem er nicht viel Aufmerksamkeit schenkt. Der Grund, warum ich neugierig bin, ist, dass ich nicht genug über das Backend weiß. Ich poste diese Frage in der Hoffnung, dass es wird für Freunde hilfreich sein, die mit dem Backend nicht vertraut sind und nicht wissen, wie es funktioniert. Es wird Ihr Gedächtnis nach dem Vorfall auf natürliche Weise vertiefen, sodass Sie es während des Entwicklungsprozesses nicht verpassen)
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.