title: Some JavaScript reserved words function as variables
body: <p>Crockford's <strong>JavaScript: The Good Parts</strong> contains <a href="http://archive.oreilly.com/pub/a/javascript/excerpts/javascript-good-parts/awful-parts.html" rel="noreferrer">the following text</a>.</p>
  
  <blockquote>
    <p><strong>Reserved Words</strong></p>
    
    <p>The following words are reserved in JavaScript:</p>
  
  <pre><code>abstract boolean break byte case catch char class const continue
   debugger default delete do double else enum export extends false final
   finally float for
   function goto if implements import in instanceof int interface long native new null
   package private protected public return short static super switch synchronized this
   throw throws transient true try typeof var volatile void while with
  </code></pre>
    
    <p>Most of these words are not used in the language.</p>
    
    <p>They cannot be used to name variables or parameters. When reserved
    words are used as keys in object literals, they must be quoted. They
    cannot be used with the dot notation, so it is sometimes necessary to
    use the bracket notation instead:</p>
  
  <pre><code>var method;                // ok
  var class;                 // illegal
  object = {box: value};     // ok
  object = {case: value};    // illegal
  object = {'case': value};  // ok
  object.box = value;        // ok
  object.case = value;       // illegal
  object['case'] = value;    // ok
  </code></pre>
  </blockquote>
  
  <p>Some of the reserved words appear to not be reserved in my installed interpreters. For example, in both Chrome 48 (beta) and node.js 0.10.40 the following code will successfully add two numbers identified by reserved words.</p>
  
  <pre><code>var abstract = 1;
  var native = 1;
  abstract + native;
  &gt; 2
  </code></pre>
  
  <p>Why can I use these two reserved words as variable names? Am I missing something crucial?</p>