1

以下の JavaScript ステートメントの括弧が理解できません。

({go_go: 'go'});

()ここ とはどういう意味ですか?

()は関数で、この関数が匿名であることを知っています。以下のコードのように。そうですか?

(function () {
    alert('something');
})();

ありがとうございました!

4

3 に答える 3

2

この文字通りの例では、それらには目的がありませんが、一般的には式を囲むためのものです。具体的には、括弧の内容がステートメントとしてではなく式として読み取られるようにするためです。

eval人々がJSON 形式のデータを逆シリアル化するために使用している場合、そのようなことがわかります。たとえば、次の形式の文字列を受け取る場合があります。

var s = '{"go_go": "go"}';

...そしてこれを使用して逆シリアル化します。

var o = eval('(' + s + ')');

これは特定の問題に対する古い回避策ですが、 Crockford の github ページにリストされている 3 つのいずれかなど、適切な JSON 解析ライブラリを使用する方がはるかに優れています。(Crockford は JSON の発明者です。) そこには、いくつかの正規表現を実行して、さまざまな不正な形式の JSON を検出してから を使用するものと、まったく使用しないものがあります。(信頼できないソースからの JSON を処理する場合は使用しません。)evalevaleval

于 2011-02-16T09:03:23.030 に答える
1

JSONデータを評価するためにJavaScriptの評価に括弧が必要なのはなぜだと思いますか? あなたの質問に答えます。

ただし、コードにプレーンなオブジェクト リテラルがあるだけの場合は必要ありません。

関数式では、アウター()は関数を匿名にしません(名前がないため、すでにそうです)。ただし、匿名関数を定義した直後に実行するにfunction(){}();は、有効ではないため必要です。

于 2011-02-16T09:05:34.233 に答える
0

一部の人々は、JSON オブジェクトを括弧で囲む習慣があります...

var jsonObject = ({go_go: 'go'});

と同じです

var jsonObject = {go_go: 'go'};

これを行う理由は、AJAX 呼び出しを介して JSON オブジェクトを取得する場合、一般的な解析エラーを防ぐために括弧が必要になることが多いためです。

次のコード行は、多くの場合、無効なラベル エラーを引き起こします。

var jsonObject =  eval(stringOfJson);

そして、これは通常、次のように解決されます。

var jsonObject =  eval( "(" + stringOfJson + ")" );

最後に、即時関数を括弧で囲む方法は次のようになります...

(function () {
    alert('something');
}());

括弧を使用する唯一の理由は、即時関数をより明確にするためです (特に www.jslint.com で推奨されているように!)。

于 2011-02-16T09:08:31.887 に答える