title: String conversion to undefined/null/number/boolean
body: <p>Do you know any better and faster way to convert a string to the type it represents?</p>
  
  <p>I've always been using this function:</p>
  
  <pre><code>var convertType = function (value){
      if (value === "undefined") return undefined;
      if (value === "null") return null;
      if (value === "true") return true;
      if (value === "false") return false;
      var v = Number (value);
      return isNaN (v) ? value : v;
  };
  </code></pre>
  
  <hr>
  
  <p>Candidates:</p>
  
  <pre><code>//Me, Gabriel Llamas
  var cast1 = function (value){
      if (value === "undefined") return undefined;
      if (value === "null") return null;
      if (value === "true") return true;
      if (value === "false") return false;
      var v = Number (value);
      return isNaN (v) ? value : v;
  };
  
  //KooiInc
  var cast2 = function (value){
      var v = Number (value);
      return !isNaN(v) ? v : 
               value === "undefined" ? undefined
           : value === "null" ? null
           : value === "true" ? true
           : value === "false" ? false
           : value
  };
  
  //LightStyle
  var cast3 = function (value){
      try {
          return (new Function("return " + value + ";"))();
      } catch(e) {
          return value;
      }
  };
  
  //Emmissary's proposal
  var cast4 = function (value){
      if (value === "undefined") return undefined;
      try{
          return JSON.parse (value);
      }catch (e){
          return value;
      }
  };
  </code></pre>
  
  <p>Benchmark code (using <a href="https://github.com/gagle/node-speedy" rel="noreferrer">speedy</a>):</p>
  
  <pre><code>var fn = function (cast){
      cast ("undefined");
      cast ("null");
      cast ("true");
      cast ("false");
      cast ("12");
      cast ("12.34");
      cast ("asd");
  };
  
  speedy.run ({
      "cast 1": function (){
          fn (cast1);
      },
      "cast 2": function (){
          fn (cast2);
      },
      "cast 3": function (){
          fn (cast3);
      },
      "cast 4": function (){
          fn (cast4);
      }
  });
  </code></pre>
  
  <p>Result:</p>
  
  <pre class="lang-none prettyprint-override"><code>File: string-conversion.js
  
  Node v0.10.18
  V8 v3.14.5.9
  Speedy v0.0.8
  
  Benchmarks: 4
  Timeout: 1000ms (1s 0ms)
  Samples: 3
  Total time per benchmark: ~3000ms (3s 0ms)
  Total time: ~12000ms (12s 0ms)
  
  Higher is better (ops/sec)
  
  cast 1
    6,270,458 ± 0.2%
  cast 2
    3,305,103 ± 0.0%
  cast 3
    54,952 ± 0.0%
  cast 4
    82,790 ± 0.4%
  
  Elapsed time: 12109ms (12s 109ms)
  </code></pre>