0

申し訳ありませんが、これは得意ではありませんが、このような関数を作成したいです

function show (message['head':'error','body':'msg'])
{ // 'error' and 'msg' and the default values
alert(message[head]);

}

show ({'head' : 'this is head', 'body' : 'this is body'});

上記の方法が正しく機能する正しい方法は何ですか?

4

3 に答える 3

4

このような:

function show (message)
{
    alert(message.head);
    // or
    alert(message['head']); // Note the quotes
}

それへのあなたの呼び出しは大丈夫です。

デフォルトを提供するには、Davidが指摘しているように、不思議なほど強力な||演算子を使用できます。

function show (message)
{
    var head = message.head || 'error',
        body = message.body || 'msg';

    alert(head);
}

(上記は、渡されたオブジェクトの変更を回避するという点で、Davidのアプローチとは少し異なりmessageます。これは、関数がオブジェクトを所有していないため、通常はお勧めできません。呼び出し元は所有します。)

これが機能するのは、head(たとえば)がmessageオブジェクト上にまったくない場合、それは偽であり、最終的ににhead = message.head || 'error'割り当て'error'られるためheadです。これは便利なトリックですが、落とし穴があります。すでに偽の値を持っている可能性があり、それが有効である場合は、このトリックheadを使用したくないでしょう。||代わりに、in以下を確認するために使用できます。

function show (message)
{
    var head = 'head' in message ? message.head : 'error',
        body = 'body' in message ? message.body : 'msg';

    alert(head);
}

それが偽であるかどうかに関係なく、それが存在する場合からの値を使用しますmessage

于 2013-02-02T12:54:19.383 に答える
1

オブジェクトにプロパティがない場合、そのプロパティにアクセスすると値が返されますundefined。これを論理OR演算子と一緒に使用し||て、オブジェクトにデフォルト値を割り当てることができます。

function show(message) {
    message.head = message.head || 'error';
    message.body = message.body || 'msg';

    alert(message.head);
}

message.headが未定義の場合"error"、オブジェクトプロパティに割り当てられます。そうでない場合は、その値が保持されます。


Crowerが指摘したように、これには潜在的な「落とし穴」があります。空の文字列が偽の値として推定され、デフォルト値の不要な割り当てが発生する可能性があるためです。プロパティが実際にオブジェクト上にあるかどうかをチェックするときに、このバージョンを使用します。

function show(message) {
    message.head = message.hasOwnProperty('head') ? message.head : 'error';
    message.body = message.hasOwnProperty('body') ? message.body : 'msg';

    alert(message.head);
}
于 2013-02-02T12:55:29.613 に答える
0

Plesaeはこれを調べます

そしてあなたを満足させる正解をマークしてください。

function show(message){
  alert(message['head']);
}
于 2013-02-02T13:03:04.267 に答える