我读过一篇关于JavaScript parseInt的文章,其中有一个问题:

parseInt(0.5);      // => 0
parseInt(0.05);     // => 0
parseInt(0.005);    // => 0
parseInt(0.0005);   // => 0
parseInt(0.00005);  // => 0
parseInt(0.000005); // => 0

parseInt(0.0000005); // => 5

为什么会这样?

推荐答案

我在ecmascript standard上搜索了一下,看到了这个:

第一步是converting the input to `string` if it is not:

19.2.5 parseInt ( string, radix )

parseInt函数是%parseInt%内在对象.调用parseInt函数时,将执行以下步骤:

  1. Let inputString be ? ToString(string).
  2. 我们走吧!TrimString(inputString,start).

...

因此,我使用String函数判断了字符串上的值,以查看每个值的输出:

String(0.5);      // => '0.5'
String(0.05);     // => '0.05'
String(0.005);    // => '0.005'
String(0.0005);   // => '0.0005' 
String(0.00005);  // => '0.00005'
String(0.000005); // => '0.000005'

String(0.0000005); // => '5e-7'

所以,这意味着当我们使用parseInt(0.0000005)时,它等于parseInt('5e-7'),根据定义:

parseInt可以解释only a leading portion of string as an integer value;它忽略任何不能被解释为整数表示法一部分的代码单元,并且没有给出任何此类代码单元被忽略的指示.

所以答案只会返回5,因为它是唯一一个非字符e之前的数字,所以剩下的e-7将被丢弃.

Node.js相关问答推荐

使用Moongose处理node.js中重定向的then()块链

填充函数在Node.js和MongoDB中不起作用

为什么我的过滤器无法在我在下面编写的 Google Analytics 4 应用程序脚本代码中工作?我该如何修复它?

为什么即使数据库确实更新了,此 POST 也无法解析并返回 200 代码?

Mongodb - 在数组数组中查找()

NodeJS:zlib.gzipSync 在不同平台上给出不同的明文输出

处理嵌套元素时,使用xml2js库解析XML时发生错误

仅在 vue 脚本未退出的情况下使用 docker 时出现错误

我正在try 在公共目录中使用 Express.js 项目部署 Angular 静态构建

我如何保护nodejs中的路由

在 nodejs 中使用 multer 上传文件返回未定义的 req.file 和空的 req.body

npm chokidar 触发事件两次

访问 Mongoose 查询之外的变量

如何在 cypress 测试中进行计算

类型中缺少属性,该类型是由类实现的接口

Socket IOFlutter 未连接

使用 node.js 执行一个 exe 文件

所有的javascript回调都是异步的吗?如果不是,我怎么知道哪些是?

如何使用 Node.js、Express 和 Mongoose 进行身份验证?

NodeJS:如何调试检测到 EventEmitter 内存泄漏.添加了 11 个侦听器