まず eval の使用法について説明します。内容は比較的簡単です。慣れている方は省略してください。
eval 関数は、s が文字列でない場合、s を直接返します。 。それ以外の場合は、s ステートメントを実行します。 s ステートメントの実行結果が値の場合はその値が返され、それ以外の場合は未定義が返されます。 オブジェクト宣言構文「{}」は値を返すことができないことに注意してください。値を返すには括弧で囲む必要があります。簡単な例は次のとおりです。
「{}」などの一般的に使用されるオブジェクト宣言ステートメントを返すには、その値を返す前に括弧で囲んで式に変換する必要があります。これは、Ajax 開発で JSON を使用する基本原則の 1 つでもあります。この例では、2 番目のアラート ステートメントは未定義を出力し、括弧を追加した後の 3 番目のアラート ステートメントはステートメントで表されるオブジェクトを出力することが明確にわかります。
次に、この記事の焦点である関数内でグローバル コードを実行する方法について説明します。この問題を説明するために、例を見てみましょう:
結局のところ、最終的な出力がグローバルであることは驚くべきことではありません。ローカル変数とグローバル変数は誰でも明確に区別できます。
注意深く体験すると、eval 関数の特徴がわかります。これは、変数定義であっても、呼び出されるコンテキスト変数空間 (パッケージ、クロージャーとも呼ばれます) 内で常に実行されます。または関数定義であるため、次のようになります。このコードでは、未定義関数エラーが生成されます:
共有: JS の eval を使用して JSON を解析する際の注意点
JS で JSON 文字列を JSON データ形式に解析するには、通常 2 つの方法があります。
2. Function オブジェクトを使用してリターン分析を実行します。
eval 関数を使用して解析し、jquery の各メソッドを使用して走査します
jquery を使用して JSON データを解析します。jquery 非同期リクエストの送信オブジェクトとして、ここで考慮されるのは、プラグを使用したカプセル化の場合、サーバーによって返される文字列の形式です。 -in JSONObject など JSON オブジェクトもこれに似ているため、ここでは説明しません。
ここではまず JSON 文字列セットを示します。文字列セットは次のとおりです。
jqueryで非同期に取得するデータ型、jsonオブジェクトと文字列をベースに、2通りの方法で得られた結果の処理方法を紹介します。
1. サーバーから返される JSON 文字列について、jquery 非同期リクエストに型の説明がない場合、または文字列として受け入れられる場合、メソッドはそれほど面倒ではありません。 eval()に文字列を入れると1回実行されます。このメソッドは、通常の javascipt を使用して json オブジェクトを取得する場合にも適しています。次に例を示します。
var dataObj=eval("(" data ")");//json オブジェクトに変換しますeval に「("(" data ")");//」を追加する必要があるのはなぜですか?
理由は、eval 自体の問題です。 jsonは「{}」で始まり最後が「{}」で終わるため、JSではステートメントブロックとして処理されるため、強制的に式に変換する必要があります。
かっこを追加する目的は、JavaScript コードの処理時に、かっこ内の式をステートメントとして実行するのではなく、eval 関数で強制的にオブジェクトに変換することです。たとえば、オブジェクト リテラル {} が外側の大かっこで追加されていない場合、eval は中かっこを JavaScript コード ブロックの開始マークと終了マークとして認識し、{} は空のステートメントを実行するとみなされます。したがって、次の 2 つの実行結果は異なります:
例: (function()) {}(); クロージャー操作などを行う場合。
2. サーバーから返される JSON 文字列の場合、jquery 非同期リクエストがタイプ (通常はこの構成属性) を「json」に設定するか、$.getJSON() メソッドを使用してサーバーからの戻り値を取得する場合、 eval() メソッドを使用する必要はありません。この時点で取得される結果はすでに json オブジェクトであるため、オブジェクトを直接呼び出すだけで済みます。ここでは、データ処理メソッドを説明するための例として $.getJSON メソッドが使用されています。
コードをコピー
このときのデータは json オブジェクトであり、json オブジェクトに解析されます