code: function (argument) {
                      var it = toPrimitive(argument, false);
                      if (typeof it == 'string' && it.length > 2) {
                          it = TRIM ? it.trim() : $trim(it, 3);
                          var first = it.charCodeAt(0)
                              , third, radix, maxCode;
                          if (first === 43 || first === 45) {
                              third = it.charCodeAt(2);
                              if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
                          } else if (first === 48) {
                              switch (it.charCodeAt(1)) {
                                  case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i
                                  case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i
                                  default: return +it;
                              }
                              for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {
                                  code = digits.charCodeAt(i);
                                  // parseInt parses a string to a first unavailable symbol
                                  // but ToNumber should return NaN if a string contains unavailable symbols
                                  if (code < 48 || code > maxCode) return NaN;
                              } return parseInt(digits, radix);
                          }
                      } return +it;
                  }
docs: 7.1.3 ToNumber(argument)