`arguments`无法获取`Destructuring`参数的默认值?

时间:2019-11-30 05:14:01

标签: javascript ecmascript-6

const supersearch = function({a = 1, b}) {
  console.log(arguments[0]);
  console.log(a, b);
};

supersearch({b: 2});

预期结果:

{
  "a": 1,
  "b": 2
}

1 2

但实际结果:

{
  "b": 2
}

1 2

我应该如何获得arguments

doc:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments


更新:

我现在可以想到的一种方式,有没有更好的书写方式?

const supersearch = function({a, b}) {
  console.log({...{a: 1}, ...arguments[0]});
  console.log(a, b);
};

supersearch({b: 2});

4 个答案:

答案 0 :(得分:0)

嗨,您定义了一个对象类型的一个自变量,因此发生了

from django.db.models.signals import pre_save
from django.dispatch import reveicer

@receiver(pre_save, sender=DataCustomer)
def data_customer_pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.pk:  # checking whether the object is new or it's being updated
        sale = instance.sales_name
        if instance.status == Status.objects.get(status_name='Deal') and instance.payment_method == Payments.objects.get(method='CASH'):
            sale.points += 13
        if instance.status == Status.objects.get(status_name='Deal') and instance.payment_method == Payments.objects.get(method='CREDIT'):
            sale.points += 8
        sale.save()

答案 1 :(得分:0)

也许您正在寻找这个:

   const supersearch = function({a = 1, b, ...rest}) {
  console.log({a,b});
  console.log(a, b);
};

supersearch({b: 2});

答案 2 :(得分:0)

我建议这样做:

 const supersearch = function(inputParams) {
          const defaulParams = { a: 1};
          const allParams = {...defaultParams, ...inputParams}; 
          const {a,b} = allParams;
          console.log(allParams);
          console.log(a, b);
        };

答案 3 :(得分:0)

您可以如下使用Object.assign({a: 1}, args);。并且destruct对象位于function中,而不是parameter中。

const supersearch = function(args) {  
  let {a, b} = Object.assign({a: 1}, args);
  console.log(arguments[0]);
  console.log(a, b);
};

supersearch({b: 2});
supersearch({a: 10, b: 2});