在JavaScript中使用科学记数法的陷阱

Eva*_*and 9 javascript syntax scientific-notation

这个问题不是寻求开发人员代码格式化意见.就个人而言,我更喜欢在我的JS代码中使用科学记数法,因为我相信它更具可读性.对我来说,6e8更具可读性600000000.话虽这么说,我只是在寻找JS中用科学记数法指定数字的潜在风险和缺点.我不经常在野外看到它,并且想知道是否有技术推理,或仅仅是因为开发人员的笨蛋.

Kei*_*ith 3

你不会“经常在野外”看到科学记数法,因为在 JS 中实际输入的唯一数字往往是常量:

\n\n
    \n
  • 以代码为中心的常量(例如枚举和级别)往往很小。
  • \n
  • 物理/数学常数(例如 \xcf\x80 或 e)往往是高度具体的。
  • \n
\n\n

这些都没有从科学记数法中受益太多。

\n\n

我将Plank 的常量“在野外”视为:

\n\n

\r\n
\r\n
const h = 6.62607004e-34;\r\nconsole.log(\'Plank\', h);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

它通常有意义的另一个地方是时间限制,例如一天中的毫秒数864e5。例如:

\n\n

\r\n
\r\n
function addDaysToDate(date, days) {\r\n  if (days === 0)\r\n    return date;\r\n  date.setTime(864e5 * days + date.valueOf());\r\n  return date;\r\n}\r\n\r\nconst now = new Date();\r\nconst thisTimeTomorrow = addDaysToDate(now, 1);\r\nconsole.log(\'This time tomorrow\', thisTimeTomorrow);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

我认为没有任何技术原因不使用这种表示法,更多的是开发人员根本避免对数字进行硬编码。

\n\n

我不认为有任何风险。您可能必须小心字符串中的数字,但如果您这样做,那么此语法的问题比数字本地化要小得多(例如,DE 用户输入"20.000,00"、 期望2e4,但2e6由于不变的数字格式而得到交换千位和小数分隔符)。

\n\n

我要补充的是,JS 无论如何都会默认为小数字输出该语法,但在一定程度上避免大数字(这因浏览器而异):

\n\n

\r\n
\r\n
console.log(\'Very small\', 1234 / 100000000000)\r\nconsole.log(\'Large, but still full in some browsers\', 1e17 * 1234)\r\nconsole.log(\'Large, scientific\', 1e35 * 1234)
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n