我是Java语言的新手,因此这个问题, 我了解箭头功能。但是,这种语法使我完全困惑。 这是PriorityQueue的实现,它采用函数比较器作为回调,这是语法,
class PriorityQueue {
constructor({ comparator = (a, b) => a - b, initialValues = [] } = {}) {
this.comparator = comparator;
this.data = initialValues;
this.heapify();
}
我不明白这行是什么意思,
{ comparator = (a, b) => a - b, initialValues = [] } = {}
完整的代码在这里,如果您需要它, https://github.com/jeantimex/javascript-problems-and-solutions/blob/master/src/common/priority-queue.js
但是有人可以帮助我理解该行代码。谢谢您。
答案 0 :(得分:3)
构造函数期望零或一个参数,如果提供,则应为一个对象。如果未提供参数,则默认为空对象。然后,它检查(可能为空)对象的属性comparator
和initialValues
。如果对象上存在这些属性,则将它们提取到那些变量名(comparator
和initialValues
)中;否则,为这些变量名分配默认值,{{1}为(a, b) => a - b
}和comparator
代表[]
。
例如
initialValues
得到new PriorityQueue()
,其中{{1}的PriorityQueue
和.comparator
的{{1}},而
(a, b) => a - b
得到initialValues
,其中[]
的{{1}}和new PriorityQueue({ comparator: (a, b) => a.localeCompare(b) })
的{{1}}。
如果传递的参数中包含PriorityQueue
或.comparator
以外的属性,则会将其忽略。
详细地写,没有默认参数:
(a, b) => a.localeCompare(b)