对不起,我不擅长这个,但我想创建一个这样的函数
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'});
上述方法正常工作的正确方法是什么?
对不起,我不擅长这个,但我想创建一个这样的函数
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'});
上述方法正常工作的正确方法是什么?
像这样:
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
,无论它是否是假的。
如果对象没有属性,则访问该属性将返回 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);
}