簡體   English   中英

有人可以向我解釋為什么此代碼返回1

[英]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解釋器采取的步驟如下:

  1. 調用valueOf並將其轉換為數字(如果可能)。
  2. 調用toString ,如果返回值是原始值,則將其轉換為數字(如果可能)。
  3. 引發TypeError

在您的情況下,由於您將unary +運算符與非數字對象一起使用,並且一元+運算符僅針對數字定義,因此請執行以下步驟。 您的對象沒有valueOf ,但是它有toString方法,因此將toString的返回值(強制為數字)用於計算表達式。

如果您想進一步探索,凱爾·辛普森(Kyle Simpson)的出色著作《 您不知道JS:類型和語法》中有更多關於類型強制的知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM