Ответ 1
Это значение указано в спецификации ECMAScript для определения внутреннего свойства [[Class]].
if( Object.prototype.toString.call(myvar) == '[object String]' ) {
// a string
}
От 8.6.2 Внутренние свойства и методы объекта:
Значение внутреннего свойства [[Class]] определяется этой спецификацией для каждого типа встроенного объекта. Значение внутреннего свойства [[Class]] для объекта-хозяина может быть любым значением String, за исключением одного из "Аргументов", "Массив", "Логическое", "Дата", "Ошибка", "Функция", "JSON", "Math", "Number", "Object", "RegExp", и "String" . Значение внутреннего свойства [[Class]] используется внутри, чтобы различать различные типы объектов. Обратите внимание, что эта спецификация не предоставляет никаких средств для доступа к этому значению программы, кроме как через Object.prototype.toString(см. 15.2.4.2).
Пример того, как это полезно, рассмотрим этот пример:
var str = new String('some string');
alert( typeof str ); // "object"
alert( Object.prototype.toString.call(str) ); // "[object String]"
Если вы используете typeof
, вы получаете "object"
.
Но если вы используете метод выше, вы получите правильный результат "[object String]"
.