2017-07-13 1 views
3

は、だから私はちょうど見つけ、この:`toPrecision`とリテラル

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

誰もが起こっている正確に何を説明することはできますか?私が考えることができるのは、2番目のケースでオプティマイザが式を事前計算し、オプティマイザの実装がtoPrecisionであることがコンパイラのものと異なっていることだけです。

  • サファリ/マック、バージョン10.1(12603.1.30.0.34)
  • クローム/マック、バージョン59.0.3071.104(公式ビルド)(64ビット)
  • のFirefox:でテスト

    /マック、54.0.1(64ビット)

EDIT:再:小数点、偉大な観測によってトリガされている - 私たちは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'を生成し、2番目の文字列は' number'を生成します。 – 4castle

関連する問題