title: Why "foo".toString() is not the same as toString.call("foo")?
body: <p>Here is a question in JavaScript below:</p>
  <pre><code>// Tested via Google Chrome console.
  var toString = Object.prototype.toString;
  
  &quot;foo&quot;.toString(); // &quot;foo&quot;
  toString.call(&quot;foo&quot;); // [object String]
  
  [].toString(); // &quot;&quot;
  toString.call([]); // [object Array]
  
  {}.toString(); // syntax error
  toString.call({}); // [object Object]
  </code></pre>
  <p>Why the result of toString is different with toString.call() ?</p>
  <p><strong>UPDATED</strong></p>
  <pre><code>String.prototype.toString.call(&quot;foo&quot;); // &quot;foo&quot;
  Object.prototype.toString.call(&quot;foo&quot;); // [object String]
  </code></pre>
  <p>Is String.prototype.toString not from the prototype chain like below?</p>
  <blockquote>
  <p>toString in String[not found]  --&gt; toString in String.prototype[not found]</p>
  <pre><code>                           --&gt; toString in Object.prototype[found]
  </code></pre>
  </blockquote>