Концепция объектов-оболочек существует в языке Java, давайте посмотрим, как она на самом деле работает в JavaScript. Итак, давайте начнем с некоторых примитивов в JavaScript, наиболее распространенным из которых является String.
Давайте начнем с очень распространенного примера, который мы все знаем с детства.
const name = «John Doe»;
и теперь мы хотим получить количество символов в приведенной выше строке, мы просто идем,
console.log (name.length);
и мы получаем длину строки как 8, хорошо, это не ракетостроение, мы все это очень хорошо знаем, но если я спрошу вы, как это работает, если String является примитивом, как мы можем использовать . (точечная запись)?
Теперь с точечной нотацией это дает представление о том, что это Object, теперь очевидно, что мы выполнили Object.property, так это действительно примитив или объект .
Непонятно, правда?
Хорошо, если вы где-то слишком запутались, вы также можете использовать ключевое слово typeof для проверки, но все же я имею в виду, что если вы выберете typeof name, вы его получите как «строка».
Я считаю, что это приведет к увеличению вашего уровня замешательства.
Хорошо, позвольте мне показать здесь «слона в комнате».
Принцип его работы заключается в том, что в JavaScript есть эквивалентные объекты для каждый из примитивных типов данных, например String, Number, Boolean и Symbol.
Таким образом, для строкового примитива тоже существует эквивалентный объект. Теперь на самом деле, когда вы пытаетесь получить доступ к name.length, это должно действительно потерпеть неудачу, если name является примитивом, но когда вы получаете доступ к нему length, то, что делает JavaScript, фактически преобразует его в его эквивалент Object, и свойство length становится доступный для него, а затем он вызывает свойство length для Object String, и именно так свойство length работает с примитивом String.
Теперь внимательно прочтите, что происходит, когда вы выполняете name.length, строка немедленно упаковывается в «объект-оболочку» и осуществляется доступ к длине,
это концепция объекта-оболочки, и переход к случаю, когда вы пытаетесь получить имя typeof это все еще «строка», это связано с тем, что строковый примитив к эквивалентному строковому объекту создается, он не назначается переменной имени, это просто создается временный объект, из него осуществляется доступ к свойству длины, а затем к объекту фактически отбрасывается, как пропавший после того, как был создан в течение доли секунды, чтобы обеспечить доступ к свойству length или просто чтобы эта операция работала.
Я надеюсь, что теперь вы понимаете, что на самом деле происходит, когда мы используем только базовую операцию String.length, именно так в игру вступают объекты оболочки.
Таким образом, помимо примитива String существуют эквивалентные объекты для Number, Boolean и введенного es6 примитива Symbol .
Надеюсь, вам понравилась эта неизвестная концепция объектов-оберток в Javascript.