function isSymbol(obj) {
    if (hasShammedSymbols) {
        return obj && typeof obj === 'object' && obj instanceof Symbol;
    }
    if (typeof obj === 'symbol') {
        return true;
    }
    if (!obj || typeof obj !== 'object' || !symToString) {
        return false;
    }
    try {
        symToString.call(obj);
        return true;
    } catch (e) {}
    return false;
}
// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives
Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives
Symbol and BigInt do have Symbol . toStringTag by spec so that can ' t be used to eliminate false positives
function isSymbol(obj) {
    if (hasShammedSymbols) {
        return obj && typeof obj === 'object' && obj instanceof Symbol;
    }
    if (typeof obj === 'symbol') {
        return true;
    }
    if (!obj || typeof obj !== 'object' || !symToString) {
        return false;
    }
    try {
        symToString.call(obj);
        return true;
    } catch (e) {}
    return false;
}
function isSymbol ( obj ) { if ( hasShammedSymbols ) { return obj && typeof obj === 'object' && obj instanceof Symbol ; } if ( typeof obj === 'symbol' ) { return true ; } if ( ! obj || typeof obj !== 'object' || ! symToString ) { return false ; } try { symToString . call ( obj ) ; return true ; } catch ( e ) { } return false ; }
Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives
Symbol and BigInt do have Symbol . toStringTag by spec so that can ' t be used to eliminate false positives