这更像是一个关于javascript如何工作的思考,而不是修复的实际问题.在类似声明的情况下
var str = 9 + " some words here";
Run Code Online (Sandbox Code Playgroud)
结果str var将包含值"9 some words here".我的问题是javascript使用什么函数来自动将Number对象'9'强制转换为一个字符串,以便与String对象"这里的一些单词"连接,并且这个函数是可更改/可重写的.
这开始于我需要在页面上输出前一个0的单个数字.这很容易通过Number对象上的快速原型函数来完成
Number.prototype.SpecialFormat = function() {
if(this < 10) {
return "0" + this;
}
else {
return this.toString();
}
};
Run Code Online (Sandbox Code Playgroud)
并简单地称呼它 (9).SpecialFormat() + " words here";
但这让我想知道我是否可以使用a覆盖Number上的toString函数
Number.prototype.toString = function() {
if(this < 10) {
return "0" + this;
}
else {
return this;
}
};
Run Code Online (Sandbox Code Playgroud)
,只是让javascripts自动转换为我处理它,所以我可以使用标准9 + " words here";来获得相同的结果"09 words here".这不仅仅是隐含的工作,我不得不最终将.toString添加到9 (9).toString() + " words here"(进一步看,会导致一些无限循环).
那么有没有办法覆盖javascript本机类型的内置功能?
*注意:我意识到这可能是" 最坏的想法 "
在步骤 7 中,加法运算符将其参数强制转换为字符串:
- 如果 Type(lprim) 是 String 或 Type(rprim) 是 String,则
- 返回串联 ToString(lprim) 和 ToString(rprim) 的结果的字符串
ToString操作对数字有特殊规则,详细信息请参见“ ToString 应用于数字类型”。
看来抽象操作ToString(number)从未使用过Number.prototype.toString。事实上,ti 是相反的:默认Number.prototype.toString函数采用抽象数字 ToString 算法。因此,不可能覆盖 ECMAScript 5 中类型强制期间数字字符串化的默认行为,因为无法更改语言定义的 ToString 操作。
ToString在将对象强制转换为字符串时确实使用目标的toString方法,但不使用数字原始值。
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |