【问题标题】:Why +str is a better than str*1 in JS to convert string to number?为什么 +str 比 JS 中的 str*1 更好地将字符串转换为数字?
【发布时间】:2016-08-22 15:01:32
【问题描述】:

假设我有一个字符串,它的值已经是一个数字,例如var str = "1234"现在我想把它转换成数字。

到目前为止,我在互联网上看到了两个技巧,

  1. 使用一元+var num = +str
  2. 使用乘法运算符*: var num = str*1

我想知道一般来说哪个更好。

正如我从此处接受的答案的评论中看到的那样:Converting Json Results to a Date,似乎最好避免使用*1。这是真的吗?背后的原因是什么?

【问题讨论】:

  • 对于整数,parseInt() 会更好
  • 一元加号根据定义旨在将值转换为数字,因此它比乘以 1 引入另一个操作数在语义上更正确。 @EricSo - parseInt() 只有当你特别想忽略字符串中的任何非数字数据或小数位值时才会更好 - 否则它 worse 比一元加 因为 它忽略了那些东西。

标签: javascript semantics


【解决方案1】:

基本上是更少的操作。

一元加号调用内部toNumber方法,而乘法运算符也调用toNumber,然后对其进行数学运算。

为什么要做额外的步骤?

http://www.ecma-international.org/ecma-262/6.0/#sec-unary-plus-operator

http://www.ecma-international.org/ecma-262/6.0/#sec-applying-the-mul-operator

【讨论】:

  • 谢谢。简洁明了的答案,让我知道 + 一点也不 hacky..这确实是官方的意图
  • 我不会说这是“官方意图”,因为存在实现一元 + 的强类型语言。但是,当使用名为 ASM 的特定 JavaScript 子集时,+ 正式用于类型定义浮点数,<value> | 0 用于类型定义 32 位整数。
猜你喜欢
  • 2020-11-17
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多