2017-07-13 39 views
3

所以我剛剛發現這一點:`toPrecision`和文字

let number = -1234; 
 
console.log(number.toPrecision(3)); // -1.23e+3 
 
console.log(-1234..toPrecision(3)); // -1230

誰能解釋到底是怎麼回事呢?我唯一能想到的是,在第二種情況下,優化器預先計算表達式,並且優化器的toPrecision的實現與編譯器的不同。

測試於:

  • Safari瀏覽器/ Mac的,版本10.1(12603.1.30.0.34)
  • 鉻/ Mac的,版本59.0.3071.104(正式版本)(64位)
  • 火狐/ Mac上,54.0.1(64位)

編輯:回覆:按小數點,偉大的觀察被觸發 - 但是,如果我們添加小數點到number,它不會突然取消exponentise :

let number = -1234.5; 
 
console.log(number.toPrecision(3)); // -1.23e+3 
 
console.log(-1234.5.toPrecision(3)); // -1230

回答

6

這是與運算符優先級的問題。

隨着括號加入,你的表達將是這樣的:

(-1234).toPrecision(3) // "-1.23e+3" 
-(1234..toPrecision(3)) // -1230 

1234..toPrecision(3)首先計算,這是"1.23e+3"
然後表達式變爲-"1.23e+3",即-1230

+0

換句話說:字符串與數字 –

+1

謝謝,我懷疑我錯過了一些明顯的東西! – Amadan

+3

這個答案可以使用'typeof'來驗證。第一個產生'string',第二個產生'number'。 – 4castle