Javascript 破坏正在运行的对象';具有默认属性的参数

Javascript 破坏正在运行的对象';具有默认属性的参数,javascript,function,object,ecmascript-6,Javascript,Function,Object,Ecmascript 6,我想将一个对象作为参数传递给函数。如果此对象的属性“prop”未定义,则应按默认值初始化它 如何使用现代JS实现这一点 我期待这样的事情: const fun = function(options = { prop: 'default'}) { console.log(options.prop)} fun({a: 'x', prop: 'hello'}) ... // log: 'hello' fun({a: 'x'}) ... // log: 'default' 如果要在参数列表中分解

我想将一个对象作为参数传递给函数。如果此对象的属性“prop”未定义,则应按默认值初始化它

如何使用现代JS实现这一点

我期待这样的事情:

const fun = function(options = { prop: 'default'}) { console.log(options.prop)}


fun({a: 'x', prop: 'hello'}) ... // log: 'hello'

fun({a: 'x'}) ... // log: 'default'

如果要在参数列表中分解结构,您将无法再访问整个原始对象(此处的
选项
),您将只能使用已分解的变量。因此,省去
选项=
部分,将
=
放在
道具之后,而不是
。例如:

constfun=function({prop='default',a}){
log('prop:',prop'a:',a);
};
乐趣({
a:‘x’,
道具:“你好”
})//日志:“你好”
乐趣({
a:‘x’

})//log:'default'
使用以下语法:

constfun=({prop=“default”})=>console.log(prop);
乐趣({a:“x”,道具:“你好”});

乐趣({a:x})您可以使用rest属性并从对象中排除
prop
,获取值或默认值,然后将该值重新分配给对象

const
fun=函数({prop='default',…options}){
赋值(选项,{prop});
console.log(options.prop);
};
乐趣({a:42});

乐趣({a:42,道具:'酒吧'})我认为您必须在函数本身内部处理此问题。下面是适用于特定场景的代码

var fun = function(options = { prop:'default'}) {
if(options.prop == undefined){
options.prop = 'default'
}
console.log(options.prop)
}

fun({a:'hello'})// logs: default

那么,这意味着我再也不能访问“a”属性了?您可以根据需要对任意多的属性进行分解,只需将它们添加到
{}的内部即可
@CertainPerformance当
null
被传递到
fun
函数时,有没有避免错误的方法?@原因默认参数仅在没有传递参数或
未定义的
时才起作用。如果可能会传递一个非未定义的非对象(例如,
null
或某个原语),那么您必须在参数列表之外进行检查,然后对参数或默认对象进行解构。