我有一些ES6代码,我在其中传递了已定义的选项对象的某些命名参数,例如...

    configureMapManager({ mapLocation, configuredWithDataCallback, locationHasChanged })
{
    if (mapLocation) console.log(mapLocation)
}

这是人为的情况,以下调用将正常工作...
configureMapManager({ mapLocation: "BS1 3TQ" })
configureMapManager({})

但这会炸毁...
configureMapManager()

...因为我无法检查传入的对象是否已定义(不是因为我没有任何参数就调用了该方法)。我该怎么做而不必像这样重写它(这很烂,因为那样您会丢失对象内允许的参数的可见性)...
    configureMapManager(options)
{
    if (options && options.mapLocation) console.log(mapLocation)
}

最佳答案

使用默认参数:

function configureMapManager({ mapLocation } = {})
{
  console.log(mapLocation);
}

当不带任何参数调用函数时,mapLocation将是未定义的:
configureMapManager(); // prints: undefined
configureMapManager({ mapLocation: 'data' }); // prints: data

09-25 18:10