Каково техническое определение итеративного Javascript и как вы тестируете его?

Я реализую полезный подкласс ES6Set объект. Для многих из моих новых методов я хочу принять аргумент, который может быть либо другим Set, либо Array, либо действительно всем, что я могу повторить. Я называю это «итеративным» в моем интерфейсе и просто использую.forEach() на нем (который отлично работает для набора или массива. Пример кода:

// remove items in this set that are in the otherIterable
// returns a count of number of items removed
remove(otherIterable) {
    let cnt = 0;
    otherIterable.forEach(item => {
        if (this.delete(item)) {
            ++cnt;
        }
    });
    return cnt;
}

Или же

// add all items from some other iterable to this set
addTo(iterable) {
    iterable.forEach(item => {
        this.add(item);
    });
}

Но, я подозреваю, что на самом деле я не поддерживаю какую-либо итерацию в том смысле, в каком ее определяет ES6, поэтому мне интересно, что в реальном определении итерируемого Javascript используется термин, как в спецификации ES6?

Как вы проверяете это в ES6 Javascript?

Как вы должны повторить универсальный итерируемый?

Я нашел такие фразы в спецификации ES6:

Если присутствует параметр iterable, ожидается, что это будет объект, который реализует метод @@ iterator, который возвращает объект итератора, который создает двухэлементный объект в виде массива, первый элемент которого является значением, которое будет использоваться в качестве ключа WeakMap и чей второй элемент - это значение, связанное с этим ключом.

Но это относится к@@iterator method который я не могу получить доступ через это имя свойства.

Ответы на вопрос(2)

Ваш ответ на вопрос