Here is a question in JavaScript below:
// Tested via Google Chrome console.
var toString = Object.prototype.toString;
"foo".toString(); // "f
>>> String.prototype.toString.call("foo")
"foo"
Object is not the same thing as a String.
String.prototype.toString
overrides Object.prototype.toString
. They are not the same function.
From the specification of String.prototype.toString:
Returns this String value. (Note that, for a String object, the toString method happens to return the same thing as the valueOf method.)
And Object.prototype.toString:
When the toString method is called, the following steps are taken:
- Let O be the result of calling ToObject passing the this value as the argument.
- Let class be the value of the [[Class]] internal property of O.
- Return the String value that is the result of concatenating the three Strings "[object ", class, and "]".
Arrays behave similar, they also override toString()
:
> [1,2].toString()
"1,2"
The global toString
function is different to the object.toString()
function.
According to this source, the global toString
function is not very well defined, and thus badly implemented across different browsers. Essentially it provides functionality similar to the typeof
operator.