Reflect.js
function OrdinaryToPrimitive(O, hint) {
            if (hint === "string") {
                var toString_1 = O.toString;
                if (IsCallable(toString_1)) {
                    var result = toString_1.call(O);
                    if (!IsObject(result))
                        return result;
                }
                var valueOf = O.valueOf;
                if (IsCallable(valueOf)) {
                    var result = valueOf.call(O);
                    if (!IsObject(result))
                        return result;
                }
            }
            else {
                var valueOf = O.valueOf;
                if (IsCallable(valueOf)) {
                    var result = valueOf.call(O);
                    if (!IsObject(result))
                        return result;
                }
                var toString_2 = O.toString;
                if (IsCallable(toString_2)) {
                    var result = toString_2.call(O);
                    if (!IsObject(result))
                        return result;
                }
            }
            throw new TypeError();
        }
function OrdinaryToPrimitive(O, hint) {
            if (hint === "string") {
                var toString_1 = O.toString;
                if (IsCallable(toString_1)) {
                    var result = toString_1.call(O);
                    if (!IsObject(result))
                        return result;
                }
                var valueOf = O.valueOf;
                if (IsCallable(valueOf)) {
                    var result = valueOf.call(O);
                    if (!IsObject(result))
                        return result;
                }
            }
            else {
                var valueOf = O.valueOf;
                if (IsCallable(valueOf)) {
                    var result = valueOf.call(O);
                    if (!IsObject(result))
                        return result;
                }
                var toString_2 = O.toString;
                if (IsCallable(toString_2)) {
                    var result = toString_2.call(O);
                    if (!IsObject(result))
                        return result;
                }
            }
            throw new TypeError();
        }
function OrdinaryToPrimitive ( O , hint ) { if ( hint === "string" ) { var toString_1 = O . toString ; if ( IsCallable ( toString_1 ) ) { var result = toString_1 . call ( O ) ; if ( ! IsObject ( result ) ) return result ; } var valueOf = O . valueOf ; if ( IsCallable ( valueOf ) ) { var result = valueOf . call ( O ) ; if ( ! IsObject ( result ) ) return result ; } } else { var valueOf = O . valueOf ; if ( IsCallable ( valueOf ) ) { var result = valueOf . call ( O ) ; if ( ! IsObject ( result ) ) return result ; } var toString_2 = O . toString ; if ( IsCallable ( toString_2 ) ) { var result = toString_2 . call ( O ) ; if ( ! IsObject ( result ) ) return result ; } } throw new TypeError ( ) ; }
7.1.1.1 OrdinaryToPrimitive(O, hint) https://tc39.github.io/ecma262/#sec-ordinarytoprimitive
7 . 1 . 1 . 1 OrdinaryToPrimitive ( O hint ) https : // tc39 . github . io / ecma262 / #sec - ordinarytoprimitive