7

var params = {a:1,b:2}; var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>'; document.write(str);

ページをクリックする<a>と、「Uncaught SyntaxError:Unexpectedidentifier」がスローされます。理解できません。

4

5 に答える 5

10

その理由は、文字列連結を使用すると、params文字列にキャストされるため[object Object]、括弧内のようなものが得られるためです。

paramsをとして配置する方がよいでしょうvar params = '{a:1,b:2}';

更新
コメントで示唆されているように、別の実行可能なアプローチは以下を使用していJSON.stringifyます。

var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('
    + JSON.stringify(params)
    + ')">aaaa</a>';
document.write(str);

古いブラウザではサポートされていない可能性があることに注意してください。それらを機能させるには、追加のライブラリJSON.stringifyを含める必要があります。

于 2012-08-01T05:52:50.033 に答える
1

[object Object]は、JavaScriptオブジェクトの文字列表現です。シナリオparamsでは、文字列と連結しました。これにより、任意の変数タイプが文字列にキャストされます。

于 2012-08-01T05:52:35.510 に答える
0

あなたの場合strは次のよう になります。<a href="#" onclick="doSomething([object Object])">aaaa</a>

ご覧のとおり、それはあなたが望むものではありません。

于 2012-08-01T05:55:58.033 に答える
0

Li0liQ の答えはかなりOKです。そのリンクをクリックすると、見つけることができますdoSomething[object Object]

これは必要なオブジェクトのみです。パラメータを に書き込んでいませんdocument。キャスティングの問題。

于 2012-08-01T06:21:48.407 に答える