为数字覆盖 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"
我正在为 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"