Javascript:将值传递给具有数组属性的函数

时间:2013-02-02 12:52:29

标签: javascript jquery

对不起,我对此并不擅长,但是 我想创建一个像这样的函数

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'});

上述方法正确工作的正确方法是什么?

3 个答案:

答案 0 :(得分:4)

像这样:

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

你的电话很好。

要提供默认值{},David points out,您可以使用curiously powerful || operator

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

    alert(head);
}

(上面与David的方法略有不同,因为它避免更改传入的message对象,这通常不是一个好主意,因为函数不拥有对象,调用者会这样做。 )

这是有效的,因为head(例如)根本不在message对象上,这是假的,因此head = message.head || 'error'最终将'error'分配给{ {1}}。这是一个方便的技巧,但有一个问题:如果head已经有一个假值,并且这是有效的,你不想使用head技巧。相反,您可以使用||来检查:

in

如果它存在,那将使用function show (message) { var head = 'head' in message ? message.head : 'error', body = 'body' in message ? message.body : 'msg'; alert(head); } 中的值,无论它是否为假。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

Plesae检查This

并标记出令您满意的正确答案。

function show(message){
  alert(message['head']);
}