![](/img/trans.png)
[英]Can someone explain why this code returns 6 6 6 6 6 instead of 1 2 3 4 5
[英]Can someone explain to me why this code returns 1
為什么這段代碼返回1,方法toString甚至沒有在任何地方調用,+運算符應將其操作數轉換為數字,但是我嘗試了此操作並返回了NaN
+{} // NaN
+{a: 2} //NaN
那么為什么這段代碼返回1 ????
+({x:+null , y : +'001' , toString : function(){return this.x+this.y;}})
+({x:+ null,y:+'001',toString:function(){返回this.x + this.y;}})
您正在重載toString
,該函數返回(+null+'001')
+ null將null強制為0;
+'001'將字符串強制為1
您從toString返回1。
在以前的情況下,對象文字的非重載toString方法的結果是"[object Object]"
,其強制轉換為數字,得到NaN。
這里唯一重要的是toString返回的內容,無論是否已重載。
當表達式以需要非整數值的方式使用非數字值時,該值首先會轉換為其等效的原始值。 然后,原始值被強制為一個數字。
JavaScript解釋器采取的步驟如下:
valueOf
並將其轉換為數字(如果可能)。 toString
,如果返回值是原始值,則將其轉換為數字(如果可能)。 TypeError
。 在您的情況下,由於您將unary +
運算符與非數字對象一起使用,並且一元+
運算符僅針對數字定義,因此請執行以下步驟。 您的對象沒有valueOf
,但是它有toString
方法,因此將toString
的返回值(強制為數字)用於計算表達式。
如果您想進一步探索,凱爾·辛普森(Kyle Simpson)的出色著作《 您不知道JS:類型和語法》中有更多關於類型強制的知識。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.