Наследует ли String объект в Javascript?

Является Object базовым классом всех объектов в Javascript, как и другой язык, такой как Java и С#?

Я попробовал под кодом в Firefox с установленным Firebug.

var t = new Object();
var s1 = new String('str');
var s2 = 'str';
console.log(typeof t);
console.log(typeof s1);
console.log(typeof s2);

Выход на консоль

object
object
string

Итак, s1 и s2 имеют разный тип?

Ответ 1

Да, 'str' - это строка literal, а не строка object.

Строковый литерал имеет доступ ко всем строковым объектам и методам, потому что javascript будет временно лить строковый литерал как строковый объект, чтобы запустить желаемый метод.

Наконец:

В тех случаях, когда они отличаются друг от друга, их обработка новых свойств и методов. Как и все объекты Javascript, вы можете назначать свойства и методы любому объекту String. Вы не можете добавлять свойства или методы в строковый литерал. Интерпретатор игнорирует их.

Подробнее читайте здесь.

Ответ 2

Этот процесс называется бокс /unboxing.

Это означает, что всякий раз, когда интерпретатор/компилятор видит примитивный тип, используемый как объект, он будет использовать

new Object([primitive])

чтобы получить действительный экземпляр. И точно так же, как только вы попытаетесь использовать его как примитив (как в выражении), он будет использовать

[boxedobject].valueOf()

чтобы получить примитив.

В ECMAScript (javascript) конструктор Object может помещать все примитивы.