obj = {
properties: 'some properties',
method : someMethod()
}
Строки не являются объектами, так почему же они обладают свойствами?
Всякий раз когда в программе предпринимается попытка обратиться к свойству
строки s, интерпретатор JavaScript преобразует строковое значение в объект, как
если бы был выполнен вызов new String(s). Этот объект наследует
строковые методы и используется интерпретатором для доступа к свойствам.
После обращения к свойству вновь созданный объект уничтожается.
(От реализаций не требуется фактически создавать и уничтожать этот промежуточный объект,
но они должны вести себя так, как если бы объект действительно создавался
и уничтожался.)
Наличие методов у числовых и логических значений объясняется теми же причинами:
при обращении к какому-либо методу создается временный объект вызовом
конструктора Number() или Boolean(), после чего производится вызов метода
этого объекта. Значения null и undefined не имеют объектов-оберток: любые попытки
обратиться к свойствам этих значений будет вызывать ошибку TypeError.