Skip to content

Instantly share code, notes, and snippets.

@xionglun
Last active December 20, 2015 22:29
Show Gist options
  • Save xionglun/6205140 to your computer and use it in GitHub Desktop.
Save xionglun/6205140 to your computer and use it in GitHub Desktop.
Javascript convert __string__ to __number__

convert a string to number at JavaScript.

  1. +
   +'12';     // 12
   typeof +'12'     // number
  
   +'12s';    // NaN
   typeof +'12s';   // number
  1. *
   '12' * 1;   // 12
   typeof('12' * 1);  // number
   typeof '12' * 1;   // NaN
  
   '12s' * 1   // NaN
   typeof('12s' * 1)  // number
  1. ~~
   ~~'12'     // 12
   typeof ~~'12'       // number
  
   ~~'12s'    // 0
   typeof ~~'12s'      //number

Test

My platform: Mac OS X 10.8.4 Intel core i5 2.5GHz
Nodejs v0.10.15

  1. convert '12' to 12
    function plusConvert(){
      console.time('plusConvert');
      for(var i = 0; i < 1000000; i++){
        +'12';
      }  
      console.timeEnd('plusConvert');
    }
    
    function multipConvert(){
      console.time('multipConvert');
      for(var i = 0; i < 1000000; i++){
        '12' * 1;
      }
      console.timeEnd('multipConvert');
    }
    
    function andnConvert(){
      console.time('andnConvert');
      for(var i = 0; i < 1000000; i++){
        ~~'12';
      }
      console.timeEnd('andnConvert');
    }
    
    function convert(){
      plusConvert();
      multipConvert();
      andnConvert();
    }
    
    convert();

And result times: 1000000:

+ 39ms38ms39ms39ms38ms39ms39ms38ms38ms38ms
* 147ms53ms51ms49ms46ms44ms42ms43ms44ms41ms
~~ 39ms41ms40ms39ms41ms40ms48ms45ms43ms42ms
And result `times: 10000000`:
+ 382ms394ms385ms388ms388ms386ms380ms378ms392ms385ms
* 1374ms374ms374ms374ms375ms373ms373ms373ms373ms389ms
~~ 358ms359ms356ms357ms358ms359ms356ms363ms358ms358ms
2. convert `'12s'` to `NaN` or `0` ```javascript function plusConvert(){ console.time('plusConvert'); for(var i = 0; i < 1000000; i++){ +'12s'; } console.timeEnd('plusConvert'); }
  function multipConvert(){
    console.time('multipConvert');
    for(var i = 0; i < 1000000; i++){
      '12s' * 1;
    }
    console.timeEnd('multipConvert');
  }
  
  function andnConvert(){
    console.time('andnConvert');
    for(var i = 0; i < 1000000; i++){
      ~~'12s';
    }
    console.timeEnd('andnConvert');
  }
  
  function convert(){
    plusConvert();
    multipConvert();
    andnConvert();
  }
  
  convert();
And result `times: 1000000`:   
<table>
   <tr><td> + </td><td>100ms</td><td>115ms</td><td>98ms</td><td>98ms</td><td>112ms</td><td>120ms</td><td>107ms</td><td>106ms</td><td>107ms</td><td>104ms</td></tr>
   <tr><td>* 1</td><td>103ms</td><td>93ms</td><td>94ms</td><td>93ms</td><td>99ms</td><td>101ms</td><td>97ms</td><td>95ms</td><td>100ms</td><td>96ms</td></tr>
   <tr><td>~~</td><td>84ms</td><td>83ms</td><td>85ms</td><td>83ms</td><td>85ms</td><td>84ms</td><td>84ms</td><td>86ms</td><td>92ms</td><td>90ms</td></tr>
<table>

And result `times: 10000000`: 
<table>
   <tr><td> + </td><td>936ms</td><td>930ms</td><td>939ms</td><td>936ms</td><td>932ms</td><td>939ms</td><td>936ms</td><td>933ms</td><td>936ms</td><td>949ms</td></tr>
   <tr><td>* 1</td><td>922ms</td><td>929ms</td><td>929ms</td><td>924ms</td><td>925ms</td><td>922ms</td><td>940ms</td><td>925ms</td><td>924ms</td><td>941ms</td></tr>
   <tr><td>~~</td><td>822ms</td><td>821ms</td><td>825ms</td><td>841ms</td><td>824ms</td><td>823ms</td><td>824ms</td><td>823ms</td><td>824ms</td><td>826ms</td></tr>
<table>





Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment