Wrapper-objekter i JavaScript

Wrapper-objekter i JavaScript

Denne artikel forklarer om wrapper-objekter i JavaScript.

YouTube Video

Wrapper-objekter

JavaScript har primitivtyper og objekter til at håndtere dem (indpakningsobjekter).

Primære typer

Primitivtyper repræsenterer en enkelt værdi og er enkle og letvægts. Disse er uforanderlige (uændrede) og har ikke direkte objektmetoder eller egenskaber, men de kan midlertidigt konverteres til wrapper-objekter til operationer.

string og number er eksempler på primitivtyper. Indpakningsobjekter starter derimod med stort begyndelsesbogstav, som String og Number.

Wrapper-objekter

For at manipulere primitive typer genererer JavaScript midlertidigt wrapper-objekter (Object-wrappers). Wrapper-objekter indeholder metoder og egenskaber for de primitive typer.

Number

1let numObject = new Number(42);   // Wrapper object
2
3console.log(typeof numObject);    // object
4console.log(numObject.valueOf()); // 42
5
6let numValue = Number(42);        // Return primitive value
7
8console.log(typeof numValue);     // number
9console.log(numValue);            // 42
  • Number er en objekttype, der wrapper en primitiv number. Ved eksplicit at oprette et Number objekt kan du håndtere tal som en number, men det anbefales normalt at bruge den primitive number type.

typeof numObject er "object", men typeof 42 er "number".

  • Vær opmærksom på, at brugen af new-operatoren til at generere et nyt wrapper-objekt giver et andet resultat end at kalde Number som en funktion. Når det kaldes som en funktion, returneres et primitivt number.

String

1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject);    // object
4console.log(strObject.valueOf()); // Hello
  • Det er en objekttype, der wrapper en primitiv string. Ved at bruge et String objekt kan du få adgang til strengens egenskaber og metoder, men normalt bruges en primitiv string.

typeof strObject er "object", men typeof "Hello" er "string".

  • Ligesom Number returnerer kald på String som en funktion en primitiv string.

Boolean

1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject);    // object
4console.log(boolObject.valueOf()); // true
  • Det er en objekttype, der wrapper en primitiv boolean. Du kan også eksplicit oprette et Boolean objekt, men normalt bruges en primitiv boolean type.

typeof boolObject er "object", men typeof true er "boolean".

  • På samme måde som Number returnerer kald på Boolean som en funktion en primitiv boolean.

BigInt

 1let bigIntObject = Object(9007199254740991n); // Wrapper object
 2
 3console.log(typeof bigIntObject);    // object
 4console.log(bigIntObject.valueOf()); // 9007199254740991n
 5
 6let bigIntValue = BigInt(9007199254740991);   // Return primitive BigInt
 7
 8console.log(typeof bigIntValue);     // bigint
 9console.log(bigIntValue);            // 9007199254740991n
10
11// Error
12let bigIntObject2 = new BigInt(9007199254740991n);
  • Objectを使ってBigIntのラッパーオブジェクトを生成できますが、通常はプリミティブ型のbigintを直接使うのが一般的です。

typeof bigIntObject"object"であるのに対し、typeof 9007199254740991n"bigint"です。

  • BigIntを関数として呼び出すとプリミティブなbigintを返しますが、new演算子をつけてBigIntのラッパーオブジェクトを生成することはできません。

Symbol

1let symObject = Object(Symbol("id")); // Wrapper object for Symbol
2
3console.log(typeof symObject);    // object
4console.log(symObject.valueOf()); //
  • Du kan bruge Object til at oprette en wrapper-objekt for Symbol, men generelt bruger du den primitive type Symbol direkte.

Forskelle mellem Primitive Typer og Wrapper-Objekter

  • Primitive typer er lette og hukommelseseffektive, men de har ikke direkte egenskaber eller metoder. Men i JavaScript oprettes midlertidige wrapper-objekter automatisk, når det er nødvendigt for at levere metoder og egenskaber, selv for primitive typer.
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);
  • Wrapper-objekter er eksplicit genererede objekter, som kan påvirke hukommelse og ydeevne, så det anbefales generelt at bruge primitive typer.

Konklusion

  • Primitivtyper: Letvægtsdatatyper såsom number, string, boolean, null, undefined og symbol, der ikke har direkte metoder.
  • Wrapper-objekter: Objekter som Number, String og Boolean, der midlertidigt konverteres fra primitivtyper.

Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.

YouTube Video