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
Numberer en objekttype, der wrapper en primitivnumber. Ved eksplicit at oprette etNumberobjekt kan du håndtere tal som ennumber, men det anbefales normalt at bruge den primitivenumbertype.
typeof numObjecter"object", mentypeof 42er"number".
- Vær opmærksom på, at brugen af
new-operatoren til at generere et nyt wrapper-objekt giver et andet resultat end at kaldeNumbersom en funktion. Når det kaldes som en funktion, returneres et primitivtnumber.
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 etStringobjekt kan du få adgang til strengens egenskaber og metoder, men normalt bruges en primitivstring.
typeof strObjecter"object", mentypeof "Hello"er"string".
- Ligesom
Numberreturnerer kald påStringsom en funktion en primitivstring.
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 etBooleanobjekt, men normalt bruges en primitivbooleantype.
typeof boolObjecter"object", mentypeof trueer"boolean".
- På samme måde som
Numberreturnerer kald påBooleansom en funktion en primitivboolean.
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
Objecttil at oprette en wrapper-objekt forSymbol, men generelt bruger du den primitive typeSymboldirekte.
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,undefinedogsymbol, der ikke har direkte metoder. - Wrapper-objekter: Objekter som
Number,StringogBoolean, 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.