SOURCE

//Symbol
//Symbol(description)
const symbol1 = Symbol('symbol1');
// console.log(symbol1.toString());

//Symbol.asyncIterator
const obj1 = {
    name: 'obj1',
    age: 10
};
Object.defineProperty(obj1, Symbol.asyncIterator, {
    value: function* () {
        const entr = Object.entries(obj1);
        const len = entr.length;
        let index = 0;

        while (index < len) {
            yield entr[index++];
        }


    }
});
const forAwaitFn = async (ger) => {
    for await (let item of ger) {
        console.log(item);
    }
};
// forAwaitFn(obj1);

//Symbol().description
//symbol.description
const symbol2 = Symbol('symbol2');
const symbol3 = Symbol.for('symbol3');
// console.log(symbol2.description, symbol3.description,
//     Symbol.iterator.description, Symbol.asyncIterator.description);

//Symbol.hasInstance
class MyClass1 {
    static [Symbol.hasInstance](instance) {
        return Array.isArray(instance);
    }
};
const MyClass2 = function () {
    MyClass2[Symbol.hasInstance] = (instance) => {
        console.log('enter---', instance);
        return Array.isArray(instance);
    }
};


console.log([] instanceof MyClass1, {} instanceof MyClass1,
    [] instanceof MyClass2, Object[Symbol.hasInstance]);
console 命令行工具 X clear

                    
>
console