function NumberToExponentialJS(fractionDigits) {
  var x = this;
  if (!IS_NUMBER(this)) {
    if (!IS_NUMBER_WRAPPER(this)) {
      throw MakeTypeError(kIncompatibleMethodReceiver,
                          "Number.prototype.toExponential", this);
    }
    // Get the value of this number in case it's an object.
    x = %_ValueOf(this);
  }
  var f = IS_UNDEFINED(fractionDigits) ? UNDEFINED : TO_INTEGER(fractionDigits);

  if (NUMBER_IS_NAN(x)) return "NaN";
  if (x == INFINITY) return "Infinity";
  if (x == -INFINITY) return "-Infinity";

  if (IS_UNDEFINED(f)) {
    f = -1;  // Signal for runtime function that f is not defined.
  } else if (f < 0 || f > 20) {
    throw MakeRangeError(kNumberFormatRange, "toExponential()");
  }
  return %NumberToExponential(x, f);
}
function NumberToExponentialJS(fractionDigits) {
  var x = this;
  if (!IS_NUMBER(this)) {
    if (!IS_NUMBER_WRAPPER(this)) {
      throw MakeTypeError(kIncompatibleMethodReceiver,
                          "Number.prototype.toExponential", this);
    }
    
    x = %_ValueOf(this);
  }
  var f = IS_UNDEFINED(fractionDigits) ? UNDEFINED : TO_INTEGER(fractionDigits);

  if (NUMBER_IS_NAN(x)) return "NaN";
  if (x == INFINITY) return "Infinity";
  if (x == -INFINITY) return "-Infinity";

  if (IS_UNDEFINED(f)) {
    f = -1;  
  } else if (f < 0 || f > 20) {
    throw MakeRangeError(kNumberFormatRange, "toExponential()");
  }
  return %NumberToExponential(x, f);
}
function NumberToExponentialJS ( fractionDigits ) { var x = this ; if ( ! IS_NUMBER ( this ) ) { if ( ! IS_NUMBER_WRAPPER ( this ) ) { throw MakeTypeError ( kIncompatibleMethodReceiver , "Number.prototype.toExponential" , this ) ; } // Get the value of this number in case it's an object. x = % _ValueOf ( this ) ; } var f = IS_UNDEFINED ( fractionDigits ) ? UNDEFINED : TO_INTEGER ( fractionDigits ) ; if ( NUMBER_IS_NAN ( x ) ) return "NaN" ; if ( x == INFINITY ) return "Infinity" ; if ( x == - INFINITY ) return "-Infinity" ; if ( IS_UNDEFINED ( f ) ) { f = - 1 ; // Signal for runtime function that f is not defined. } else if ( f < 0 || f > 20 ) { throw MakeRangeError ( kNumberFormatRange , "toExponential()" ) ; } return % NumberToExponential ( x , f ) ; }
ES6 20.1.3.2 Number.prototype.toExponential(fractionDigits)
ES6 20 . 1 . 3 . 2 Number . prototype . toExponential ( fractionDigits )