Javascript 数字串存储在哪里?
例如,一些代码Javascript 数字串存储在哪里?,javascript,Javascript,例如,一些代码 let a = 1 a.__proto__.toString = function(){ return 'test'} a.toString() //"test" a + '2' //"12" 我真的不明白toString方法存储在哪里。 如果我对我得到的可变对象这样做 let o = {} o.__proto__.toString = function(){ return 'test'} o.toString() //"test" o + '2' //"test2" 正如我
let a = 1
a.__proto__.toString = function(){ return 'test'}
a.toString()
//"test"
a + '2'
//"12"
我真的不明白toString
方法存储在哪里。
如果我对我得到的可变对象这样做
let o = {}
o.__proto__.toString = function(){ return 'test'}
o.toString()
//"test"
o + '2'
//"test2"
正如我所预料的那样。
所以问题是,当类型转换发生时,在哪里存储和调用
的toString
或其他不可变类型。它存储为原型的属性
记住,数字就是数字。当您使用它在表达式中求值时,例如使用运算符+,它的toString方法不会被调用。相反,它的值被解析,并用于计算表达式的其余部分。这里的问题不在于编号;只是将数字转换为字符串时没有调用Number.prototype.toString
。JavaScript用于字符串转换,并且对原语有特殊的行为
Number:返回NumberToString(参数)
所以问题是,当类型转换发生时,数字或其他不可变类型的字符串存储在哪里并被调用
它存储在Number.prototype
上。更重要的问题是:
执行1+'a'
时,数字如何转换为字符串
不是通过toString
方法
toString
方法仅在将对象转换为基本值时使用。但是,数字已经是基本值。相反,有一个内部ToString
例程被调用以将数字转换为字符串。有关详细信息,请参见ES2017规范,网址:和。细节有点长,但开头是这样的:
如果m
是NaN
,则返回字符串“NaN”
如果m
是+0
或-0
,则返回字符串“0”
如您所见,这些是关于如何将数字值转换为字符串的非常具体的说明,与number.prototype.toString上定义的实际toString
方法无关。toString
JavaScript不使用toString
将原始数据类型转换为字符串。信息技术事实上,以下所有示例都是以您为例的:
设a=1,b='string',c=false,d=100.5,e={}
a、 _uuuproto_uuuu.toString=>'test'
b、 _uuuproto_uuuu.toString=>'test'
c、 _uuuproto_uuuu.toString=>'test'
d、 _uuuproto_uuuu.toString=>'test'
e、 _uuuproto_uuuu.toString=>'test'
console.log(a+'X',b+'X',c+'X',d+'X',e+'X')
@Ry当toString
被设置为那样时,Number.prototype.toString
被设置,我刚刚检查过toString
和valueOf
仅为对象调用。对于a=1
,a
是一个基本值,而不是一个对象。@niceman:我想了一会儿,问题是a.\uuuuuuuuuuuuuuuuuuu
是什么。