ホームページ >ウェブフロントエンド >jsチュートリアル >Ajax_json で Json を解析する 2 つの方法の比較分析
eval() //このメソッドは推奨されません
JSON.parse() //推奨メソッド
1. 2 つの方法の違い
最初にオブジェクトを json 形式で初期化します。
var jsonDate = '{ "name":"周星驰","age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法
次に、コンソールで呼び出します:
console.log( jsonObj.name ); // どちらのメソッドも正しく入力できます Stephen Chow
それでは、2 つの方法の違いは何でしょうか? (以下のコードを少し変更してみましょう。青い文字が変更部分です)
var jsonDate = '{ "name":alert("hello"),"age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23
「JSON.parse();」メソッドを置き換えます:
var jsonDate = '{ "name":alert("hello"),"age":23 }' var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法 cosole.log( jsonobj.age ) // 报错 这个错误告诉我们这个字符串是不合法的
概要: 「eval();」メソッドは解析時に文字列が正当であるかどうかを判断せず、json オブジェクト内の js メソッドも実行されますが、これは非常に危険です。この方法のメリットは言うまでもなく、お勧めです。 (理解できない友達は自分でコンソールでテストできます)
2. 拡張の問題
上記のテストでは、中括弧の外側の引用符が赤色でマークされていることがわかります。この引用符のペアは非常に重要ですが、「eval();」と「JSON .parser」が存在するため、無視されることがよくあります。 ();" これら 2 つのメソッドのパラメーターは文字列のみを受け入れます。つまり、文字列のみを解析できます!!
次に、初期化時に引用符を追加しない場合、それ自体がオブジェクトであり、js はオブジェクト自体のプロパティとメソッドを直接取得できます。それを文字に変換するには、「eval();」または「JSON.parse();」を使用します。これは環境に優しくなく、効率的でもありませんか?
理由は非常に簡単です。フロントエンドは文字列データ形式のみをバックエンドに提供できます。バックエンドがフロントエンドに返すものは、文字列の場合は返されるデータ形式によって異なります。使用する前に解析する必要があります。
(これは、一般に誰もが無視し、あまり注意を払わない小さな問題です。私が興味を持っている理由は、バックエンドについて十分な知識がないからです。私はこの質問を投稿しました。バックエンドに詳しくなく、バックエンドがどのように機能するかを知っている友人にとっては役立ちます。インシデント後の記憶が自然に深まるため、開発プロセス中にそれを見逃すことはありません)
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。