How do I work around JavaScript's parseInt octal behavior?

后端 未结 10 1634
Happy的楠姐
Happy的楠姐 2020-11-21 07:36

Try executing the following in JavaScript:

parseInt(\'01\'); //equals 1
parseInt(\'02\'); //equals 2
parseInt(\'03\'); //equals 3
parseInt(\'04\'); //equals          


        
10条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-21 08:06

    If you know your value will be in the signed 32 bit integer range, then ~~x will do the correct thing in all scenarios.

    ~~"08" === 8
    ~~"foobar" === 0
    ~~(1.99) === 1
    ~~(-1.99)  === -1
    

    If you look up binary not (~), the spec requires a "ToInt32" conversion for the argument which does the obvious conversion to an Int32 and is specified to coerce NaN values to zero.

    Yes, this is incredibly hackish but is so convenient...

提交回复
热议问题