为数字覆盖 Javascript 的 toString

Override Javascript's toString for numbers

我正在为 javascript 中的数字覆盖 toString 方法,因为我需要它 return "" 以获得 NaN 值,而不是默认 "NaN":

Number.prototype.original_toString = Number.prototype.toString;
Number.prototype.toString = function(radix) {
  var originalValue = this.original_toString(radix);
  if (originalValue == "NaN") {
    return "";
  } else {
    return originalValue;
  }
};

然后我得到以下行为:

(3).toString()         => "3"
Number.NaN.toString()  => ""

没关系。问题是当我通过以下方式将数字转换为字符串时:

"" + 3            => "3"
"" + Number.NaN   => "NaN"  # This is not what I expected

如您所见,在本例中未使用覆盖的方法。有没有其他方法可以使它在两种情况下都能正常工作?我也尝试覆盖 Number.prototype.toLocaleString 但没有运气。这是一个可以玩的 jsfiddle:http://jsfiddle.net/tmjf8cao/3/

问题是,Num.NAN是一个静态变量(不是"number"属于数字),这意味着你还没有覆盖它的toString()方法。您也可以尝试覆盖 Number。NaN.toString

我认为可能根本无法覆盖隐式 toString 方法。

Number.prototype.toString = function() { return "hello world!" };

(3).toString()  => "hello world!"
3 + "" => "3"