Вы слышали о классах-оболочках?

Вы слышали о классах-оболочках? Это очень распространенный термин во многих языках. Идея состоит в том, что примитив, как и классы, можно обернуть в объект класса и получить доступ к набору методов, доступных при инициализации объектов.

Хорошо, как это связано с автобоксом?

Фактически, концепция автобокса работает точно так же, как классы-оболочки.

Давайте поговорим о примитивах, потому что автобоксирование - это идея неявного превращения примитивов в классы объектов, когда мы должны получить доступ к определенным методам, которые примитивы «кажутся» имеющимися. Чтобы понять, как работает автобокс, нам нужно понять, как ведут себя примитивы.

Примитивы в javascript (или, честно говоря, на любом другом языке) - это данные, не имеющие объектов и методов. Вот следующие примитивы в javascript:

  • нить
  • номер
  • Bigint
  • логический
  • неопределенный
  • символ

Поскольку примитивы не являются объектами и не имеют собственных методов, мы должны иметь возможность предположить, что не можем вызвать метод этих примитивов, верно?

Хм ... теоретически да, но в следующем примере это не так:

Чего ждать? Почему мы можем просто вызвать метод из примитива? Если мы действительно запустили этот фрагмент кода на консоли разработчика или через узел, он не только не выдаст ошибку, но и даст нам правильные входные данные.

Это не имеет смысла, правда? Разве мы не говорили, что у примитивов нет доступа к методам?

Что ж… вот что происходит.

Когда мы вызываем метод примитива, сам примитив автоматически помещается в объект-оболочку. Верно! Вы только что слышали… он превращается в объект с набором методов-прототипов.

Например, когда мы объявляем const number = 1 и пытаемся получить доступ к number.valueOf (), number автоматически помещается в объект Number, а затем обращается к одному из его методов-прототипов, valueOf, в котором он возвращает 1.

Если вы console.log Number._proto_, вы сможете увидеть больше методов, доступных для объекта Number.

Точно так же, когда мы вызываем метод для строкового примитива, происходит то же самое. Он автоматически упаковывается в строковый объект, к которому прилагается множество полезных прототипных методов, таких как substring и concat. Эти методы являются одними из наиболее часто используемых.

Если вам интересно узнать о других методах, связанных с примитивами, вам следует прочитать документацию о прототипах javascript в Интернете. Методы прототипов массивов и строк особенно полезны и распространены в мире javascript.

Вот и все! Вы узнали, как работает автобокс в javascript.