一元运算符+(变量)是否与Number(变量)解释相同?

时间:2017-09-29 07:10:21

标签: javascript unary-operator

我突然想知道这两个例子是否相同。

    // sampler pack one
    const something = '5'
    console.log(typeof something)
    const thing = +(something)
    console.log(typeof thing)
    
    // sampler pack two
    const something2 = '5'
    console.log(typeof something2)
    const thing2 = Number(something2)
    console.log(typeof thing2)

我的问题的本质是我经常使用Number()来确保某些字符串被解释为数字,因此在JavaScript引擎盖下的一元加运算符是一样的吗?还是更快?还是突出了任何特殊条件? (特别是大数字或特殊数字?)

我刚刚在这里运行了这个测试,显示它们完全相同:

const unaryStart = performance.now()
const something2 = '5'
const thing2 = +(something2)
const unaryEnd = performance.now()
console.log((unaryEnd - unaryStart) + ' ms')

const numberStart = performance.now()
const something = '5'
const thing = Number(something)
const numberEnd = performance.now()
console.log((numberEnd - numberStart) + ' ms')
        

0.0049999999999954525 ms
0.0049999999999954525 ms

1 个答案:

答案 0 :(得分:1)

两者都将字符串转换为Number,来自MDN约unary plus +

  

[...]一元加号是将某些东西转换为数字的最快和首选方式,因为它不对该数字执行任何其他操作。

从标准ECMA 262 V 6,unary plus

  

UnaryExpression :+ UnaryExpression

     
      
  1. expr 成为评估UnaryExpression的结果。
  2.   
  3. 返回ToNumber(GetValue( expr ))。
  4.   

从标准ECMA 262 V 6开始,Number需要更多步骤,因为number可以作为构造函数调用,并且在步骤4中检查,这需要一些时间。

  
      
  1. 如果未定义NewTarget,请返回n。
  2.