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
}

你的电话很好。

正如大卫指出的那样,要提供默认值,您可以使用功能强大的||运算符

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

如果对象没有属性,则访问该属性将返回 value 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

请检查这个

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

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