JavaScript Object Literals: Property names as strings vs. "raw"
<p>Can there ever be a difference between:</p>

<pre><code>var x = {
  hello: 'world'
};
</code></pre>

<p>and</p>

<pre><code>var x = {
  'hello': 'world'
};
</code></pre>

<p>?</p>

<p>That is, under what conditions does giving a property name as a string have different results than giving it as a "raw" name? For example, I know that <code>var x = {}; x['@£$%'] = 'bling!';</code> is valid (since any string can be a property), but <code>x.@£$% = 'bling!'</code> won't work. Neither will language keywords or reserved keywords as property names (so <code>var x = {for: 'good', class: 'y'};</code> won't work.</p>

<p>Anything else?</p>

<p>For example, what if </p>

<pre><code>var hello = 'goodbye'; 
</code></pre>

<p>is defined in the above example? Or something else, like </p>

<pre><code>function hello() { 
  return 'goodbye';
}
</code></pre>

<p>?</p>

<p>Should I always make my property names strings, just to be safe?</p>
