Расскажите о упаковке и распаковке в JavaScript

JavaScript
Расскажите о упаковке и распаковке в JavaScript

существуетJavaScriptЕсть ссылочный тип называетсяОсновной тип упаковки,Оно включаетString、Number和Boolean. то это и основной типString、Number和BooleanВ чем дело? Тогда смотри вниз 👀

боксерская операция

Так называемыйкоробка, который относится к операции преобразования примитивного типа данных в соответствующий ссылочный тип. И упаковка делится на隐式装箱和显式装箱.

неявный бокс

Для неявного бокса мы смотрим на следующий код:

var s1 = 'call_me_R'; // 隐式装箱
var s2 = s1.substring(2);

Шаги выполнения приведенного выше кода на самом деле следующие:

  1. Создайте экземпляр типа String;
  2. Вызвать указанный метод в экземпляре;
  3. Уничтожьте этот экземпляр.

Вышеупомянутые три шага переводятся в код следующим образом:

# 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»