我只是想的東西,發現這個: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