существуетJavaScript
Есть ссылочный тип называетсяОсновной тип упаковки,Оно включаетString、Number和Boolean
. то это и основной типString、Number和Boolean
В чем дело? Тогда смотри вниз 👀
боксерская операция
Так называемыйкоробка, который относится к операции преобразования примитивного типа данных в соответствующий ссылочный тип. И упаковка делится на隐式装箱和显式装箱
.
неявный бокс
Для неявного бокса мы смотрим на следующий код:
var s1 = 'call_me_R'; // 隐式装箱
var s2 = s1.substring(2);
Шаги выполнения приведенного выше кода на самом деле следующие:
- Создайте экземпляр типа String;
- Вызвать указанный метод в экземпляре;
- Уничтожьте этот экземпляр.
Вышеупомянутые три шага переводятся в код следующим образом:
# 1
var s1 = new String('call_me_R');
# 2
var s2 = s1.substring(2);
# 3
s1 = null;
неявный боксПри чтении значения базового типа фон создаст соответствующий базовый тип.基本包装类型
объект. Вызов метода для объекта этого базового типа фактически является вызовом метода для объекта этого базового типа. Этот базовый тип объекта является временным, он существует только в тот момент, когда выполняется строка кода, которую вызывает метод, и уничтожается сразу после выполнения метода. Это также является причиной того, что добавление атрибутов и методов к базовым типам не будет распознавать или сообщать об ошибках, как показано ниже:
var s1 = 'call_me_R';
s1.job = 'frontend engineer';
s1.sayHello = function(){
console.log('hello kitty');
}
console.log(s1.job); // undefined
s1.sayHello(); // Uncaught TypeError: s1.sayHello is not a function
показать упаковку
Еще один вид боксапоказать упаковку, это проще понять, это через基本包装类型
Объекты явно упаковывают примитивные типы следующим образом:
var name = new String('call_me_R');
Отображение манипуляций с боксом можетnew
Результирующий объект дополняется атрибутами и методами, так как через通过new操作符创建的引用类型的实例,在执行流离开当前作用域之前一直保留在内存中
.
var objStr = new String('call_me_R');
objStr.job = 'frontend engineer';
objStr.sayHi = function(){
console.log('hello kitty');
}
console.log(objStr.job); // frontend engineer
objStr.sayHi(); // hello kitty
Распаковка
Распаковка противоположна упаковке.РаспаковкаОтносится к преобразованию ссылочных типов в примитивные типы данных. Обычно по типу ссылкиvalueOf()和toString()
метод достижения.
В приведенном ниже коде обратите внимание, чтоvalueOf()和toString()
Различия в возвращаемых значениях:
var objNum = new Number(64);
var objStr = new String('64');
console.log(typeof objNum); // object
console.log(typeof objStr); // object
# 拆箱
console.log(typeof objNum.valueOf()); // number 基本的数字类型,想要的
console.log(typeof objNum.toString()); // string 基本的字符类型,不想要的
console.log(typeof objStr.valueOf()); // string 基本的数据类型,不想要的
console.log(typeof objStr.toString()); // string 基本的数据类型,想要的
Поэтому в процессе распаковки вы должны распаковать в соответствии с фактической ситуацией, не делайте это вслепую - это смущает быть благодарным 😅
позже
Статья впервые опубликована:GitHub.com/still99/блог…
больше контента:GitHub.com/still99/блог…
Ссылаться на
Упаковка и распаковка примитивов JavaScript
«Продвинутое программирование на JavaScript»