title: Why doesn't ["A","B","C"].map(String.prototype.toLowerCase.call) work?
body: <p>This, of course, returns what you would expect:</p>
  
  <pre><code>["A","B","C"].map(function (x) {
      return x.toLowerCase();
  });
  // --&gt; ["a", "b", "c"]
  </code></pre>
  
  <p>So does using String.prototype.toLowerCase.call:</p>
  
  <pre><code>["A","B","C"].map(function (x) {
      return String.prototype.toLowerCase.call(x);
  });
  // --&gt; ["a", "b", "c"]
  </code></pre>
  
  <p>It also works if you pass the extra arguments given by map, as it throws away the arguments:</p>
  
  <pre><code>["A","B","C"].map(function (x, index, arr) {
      return String.prototype.toLowerCase.call(x, index, arr);
  });
  // --&gt; ["a", "b", "c"]
  </code></pre>
  
  <p>But, this does not work:</p>
  
  <pre><code>["A","B","C"].map(String.prototype.toLowerCase.call);
  // --&gt; TypeError: undefined is not a function
  </code></pre>
  
  <p>The following doesn't work either, because <code>arguments</code> has the Object prototype instead of the Array prototype, so <code>slice</code> is undefined on it.  Is the reason for the above behavior perhaps because of something like this-- where <code>slice</code> or some other similar Array function is used internally?</p>
  
  <pre><code>["A","B","C"].map(function (x) {
      return String.prototype.toLowerCase.apply(x, arguments.slice(1));
  });
  // --&gt; TypeError: undefined is not a function
  </code></pre>