对不起,我对此并不擅长,但是 我想创建一个像这样的函数
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'});
上述方法正确工作的正确方法是什么?
答案 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)