我只是想的东西,发现这个:String(number)在内部调用number.toString吗?
如果你打电话String(n)
内定制toString
,它调用本身并引发错误Maximum Call Stack exceeded
,
Number.prototype.toString = function() {
return String(this)
}
var a = 10;
try {
a.toString()
} catch (err) {
console.log(err.message)
}
但如果您直接拨打var b = String(a)
,则不会拨打toString
功能。
Number.prototype.toString = function(){
console.log(this);
return '' + this;
}
var a = 10;
a.toString();
注:我知道上面的代码中也抛出同样的错误,但我已经Node
,chrome - JSFiddle
和Firefox - JSFiddle
检查,这是一致的。 var b = String(a)
不叫number.toString()
,'' + this
也不叫。这是在栈片段中的一些优化,其在''+this
上调用number.toString()
。
所以我的问题是,我错过了什么?为什么这种奇怪的行为?
@Downvoters,我尊重你的观点,但如果你认为,什么是错的帖子,请分享您的评论。只是投票下来不会帮助任何人。 – Rajesh