这条线有什么区别:

var a = parseInt("1", 10); // a === 1

这条线呢

var a = +"1"; // a === 1

jsperf test表明,在当前的chrome版本中,一元运算符要快得多,假设它是用于 node 的.js!?

如果我try 转换非数字的字符串,它们都返回NaN:

var b = parseInt("test" 10); // b === NaN
var b = +"test"; // b === NaN

那么,什么时候我应该更喜欢使用parseInt而不是一元加号(尤其是在node.js中)???

edit:那么,双瓦片操作符~~有什么区别呢?

推荐答案

以下是我所知道的一些不同之处:

  • 空字符串""计算为0,而parseInt计算为NaN.在我看来,空白字符串应该是NaN.

      +'' === 0;              //true
      isNaN(parseInt('',10)); //true
    
  • 一元+的作用更像parseFloat,因为它也接受小数.

    另一方面,当parseInt看到一个非数字字符时,它会停止解析,比如表示小数点.的句点.

      +'2.3' === 2.3;           //true
      parseInt('2.3',10) === 2; //true
    
  • parseIntparseFloat解析并构建字符串left to right.如果他们看到一个无效字符,它将返回已被解析为数字的内容(如果有),如果没有被解析为数字,则返回NaN.

    另一方面,如果整个字符串不能转换为数字,则一元+将返回NaN.

      parseInt('2a',10) === 2; //true
      parseFloat('2a') === 2;  //true
      isNaN(+'2a');            //true
    
  • @Alex K.的注释所示,parseIntparseFloat将按字符进行解析.这意味着十六进制和指数符号将失败,因为xe被视为非数字分量(至少在base10上).

    不过,一元+将正确转换它们.

      parseInt('2e3',10) === 2;  //true. This is supposed to be 2000
      +'2e3' === 2000;           //true. This one's correct.
    
      parseInt("0xf", 10) === 0; //true. This is supposed to be 15
      +'0xf' === 15;             //true. This one's correct.
    

Node.js相关问答推荐

Windows上使用ES6+的OpenAPI规范的Express服务器不接受嵌套路由'

postgresql层与应用层的序列化

我的Node.js应用程序没有将Mongoose方法findByIdAndDelete作为函数进行检测

从mongodb集合中获取每分钟数据的每小时数据

Nestjs swc 错误:找不到模块项目路径/src/app.module

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

表达 js 错误处理程序在第一个之后被忽略

$not 的聚合版本是什么?

TypeError:在使用 Jest、Supertest、Express、Typescript 进行测试时无法读取未定义的属性(读取listen)

错误:找不到模块'C:\Users\nguye\AppData\Local\nodejs\node_modules\npm\bin\npm-cli.js'

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

在 NodeJS/ESP32 中通过 WebSocket 发送二进制数据 - 如何识别二进制和文本消息

无法通过谷歌Electron 表格 api( node js)中的服务帐户访问写入

在安装 tensorflow 时遇到问题

在 Express-js 中使用路由

Node JS:自动 Select `http.get`与`https.get`

将变量传递给nodemailer中的html模板

User.findOrCreate 函数是做什么的,什么时候在Passport 中调用它?

Node应用程序中相同npm包的两个版本

Nodejs将字符串转换为UTF-8