number型別呼叫toString報錯的問題

2021-08-26 23:24:36 字數 878 閱讀 5304

為什麼1.tostring()會報錯,number(1).tostring()就不報錯?number(1)返回的也是number型別的1

js中的點有兩種,小數點和訪問物件屬性的點。如果乙個表示式中有兩個以上的點,那麼第二個以及後面的點會被js引擎當做是訪問物件屬性的點。如'abc'.tostring().slice(1).indexof('c') 。而第乙個點就有兩種情況了,有可能是小數點,也可能是訪問物件屬性的點。js引擎在解讀以數字開頭的第乙個點時,有自己的一套方法去判斷這個點是屬於哪一種,然後再校驗點後面的寫法是否符合規範。

1.tostring() // uncaught syntaxerror: invalid or unexpected token  。此處是語法錯誤,並非引用錯誤。也就是說這種寫法,這個點會被js引擎當做小數點,'tostring()' 會被作為乙個不合法的浮點數來解釋,類似於 1.hello ,  1.你好  都是此類語法錯誤。

1.2.tostring() // "1.2"  。返回1.2,第乙個點被認為是小數點,第二個點被認為是用於訪問屬性的點,可以呼叫。

1 .tostring() // "1" 。1後有空格,小數點前後不會有空格,所以這個點會被作為呼叫屬性的點。

1..tostring()  // "1" 。 1後面兩個點,第二個點是訪問屬性,前面的1., 會被當做1.0

1['tostring']() //"1" 。採用中括號來訪問屬性,也不會報錯。

再看上面的問題,我是這麼理解的,number(1).tostring(),是對乙個函式的返回值呼叫tostring(),這個點當然會被js引擎當做訪問屬性的點,然後在對number(1)的返回值number 1呼叫tostring()方法,這個點沒有被當做小數點。而1.tostring()的點直接就被當做小數點了,所以會報錯。

NUMBER型別細講

1 number型別細講 oracle number datatype 語法 number precision scale 簡稱 precision p scale s number p,s 範圍 1 p 38,84 s 127 儲存資料範圍 1.0e 130 number value 1.0e 1...

資料型別 number

總結 1 給數字賦值時,通過使用 e 來給數字新增n個零,如 let billion 1e9 let small 1e 9 2 nan不等於任何東西包括他本身 3 數字轉字串 str.tostring base 4 字串轉數字 praseint str,base 5 數字捨入 1 math.floo...

將任意型別轉為number型別

一 轉為整數 var num parseint str 讀取字串中的整數部分 1 從第乙個字元向後讀 2 如果碰到第乙個數字字元,開始獲取數字,再次碰到不是數字的字元 包括小數點 停止讀取 3 如果開頭碰到空格,忽略 4 如果碰到的第乙個非空格字元,不是數字,說明不能轉,結果是nan not a n...