有些代码例如.
let a = 1
a.__proto__.toString = function(){ return 'test'}
a.toString()
//"test"
a + '2'
//"12"
Run Code Online (Sandbox Code Playgroud)
我真的无法理解toString方法存储在哪里.如果我用可变对象做到这一点,我得到了
let o = {}
o.__proto__.toString = function(){ return 'test'}
o.toString()
//"test"
o + '2'
//"test2"
Run Code Online (Sandbox Code Playgroud)
这符合我的预期.所以,问题是,其中toString的Number或其他不变类型存储并调用时类型转换发生.
Fel*_*ing 28
所以问题是在发生类型转换时存储和调用的toString of Number或其他不可变类型
它存储在Number.prototype.更重要的问题是:
在做
1 + 'a'什么时,如何将数字转换为字符串?
不是通过toString方法!
该toString方法仅在将对象转换为原始值时使用.但是,一个数字已经是一个原始值.相反,有一个内部 ToString例程被调用以将数字转换为字符串.详细信息可以在ES2017规范被发现在12.8.3,7.7.12及7.1.12.1.细节有点长,但它是这样开始的:
- 如果
m是NaN,则返回String"NaN".- 如果
m是+0或-0,则返回String"0".- ...
正如您所看到的,这些是关于如何将数字值转换为字符串的非常具体的说明,这与指定的实际toString方法无关Number.prototype.toString.
| 归档时间: |
|
| 查看次数: |
1056 次 |
| 最近记录: |