Строка наследует от объекта в Javascript? - PullRequest
2 голосов
/ 11 мая 2010

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

Я попробовал приведенный ниже код в 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 имеют различный тип?

Ответы [ 3 ]

7 голосов
/ 11 мая 2010

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

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

Наконец:

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

Читать подробнее здесь .

2 голосов
/ 11 мая 2010

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

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

new Object([primitive])

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

[boxedobject].valueOf()

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...