重写Javascript';他在寻找数字

重写Javascript';他在寻找数字,javascript,overriding,tostring,Javascript,Overriding,Tostring,我正在重写javascript中数字的toString方法,因为我需要它为NaN值返回”,而不是默认的“NaN”: 然后我得到以下行为: (3).toString() => "3" Number.NaN.toString() => "" 没关系。问题是当我用以下方式将数字转换为字符串时: "" + 3 => "3" "" + Number.NaN => "NaN" # This is not what I expected

我正在重写javascript中数字的
toString
方法,因为我需要它为
NaN
值返回
,而不是默认的
“NaN”

然后我得到以下行为:

(3).toString()         => "3"
Number.NaN.toString()  => ""
没关系。问题是当我用以下方式将数字转换为字符串时:

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

如您所见,在这种情况下,未使用重写的方法。有没有其他方法可以让它在这两种情况下都能正常工作?我还尝试重写了
Number.prototype.toLocaleString
,但没有成功。这里有一个JSFIDLE可以使用:

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

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


NaN
属性是一个不可写常量->我认为这可能是因为
3 instanceof Number==false
(另一方面
new Number(3)instanceof Number==true
,但是
typeof new Number(3)!==“Number”
"" + 3            => "3"
"" + Number.NaN   => "NaN"  # This is not what I expected
Number.prototype.toString = function() { return "hello world!" };

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