Что делает следующий фрагмент кода из примера. js? - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь понять Slate. js, просматривая пример расширенного текста , и я наткнулся на следующий фрагмент кода, который я не понимаю.

const isBlockActive = (editor, format) => {
    const [match] = Editor.nodes(editor, {
      match: n => n.type === format,
  })

  return !!match
}

Я не эксперт по javascript, и я новичок как в машинописном, так и в печатном письме. js поэтому заранее прошу прощения за то, что не смог сформулировать свой вопрос лучше, но вот что я сейчас понимаю и что я Я все еще не уверен насчет:

(1) Editor.nodes () - это метод, который возвращает Iterable. Что такое нотация const [match]? Это javascript или машинопись?

(2) "match" в "const [match]" совпадает с "match" в "match : n => n.type === format"? Если так, значит ли это, что «const [match]» - это массив с одним элементом, который является функцией? Кажется странным, если бы это было так, тогда зачем вообще заставлять Editor.nodes () возвращать Iterable?

(3) Я знаю, что двойные восклицательные знаки дают мне логический объект, но так как я не могу Обдумывая, является ли match функцией, или итерацией, или чем-то еще, я понятия не имею, что говорит мне правда или ложь !!match о начальной итерации, возвращаемой Editor.nodes ().

Спасибо за любой свет, который ты сможешь пролить на мой растерянный мозг!

1 Ответ

0 голосов
/ 01 февраля 2020

Это называется деструктуризация массива . match - это переменная, которая содержит первый элемент массива (или, вернее, первое значение, полученное итератором), возвращаемую функцией Editor.nodes. Едва ли это равно:

  const match = Editor.nodes(...)[0];

Или точнее:

 const _it = Editor.nodes(...)[Symbol.iterator]().next();
 const match = _it.done ? undefined : _it.value;
...