重写Javascript's to字符串表示数字

Override Javascript's toString for numbers

本文关键字:to 字符串 表示 数字 Javascript 重写      更新时间:2023-11-23

我将为javascript中的数字重写toString方法,因为我需要它为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是一个静态变量(而不是"数字"属于数字),这意味着你没有覆盖它的toString()方法。您可以尝试覆盖Number。CCD_ 7。

我认为隐式toString方法可能根本无法重写。

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