ECMAScript Type Conversie

Een van de belangrijkste kenmerken van alle programmeertalen is de mogelijkheid om typeconversies uit te voeren.

ECMAScript biedt ontwikkelaars een groot aantal eenvoudige typeconversiemethoden.

De meeste typen hebben methoden voor eenvoudige conversies, en er zijn ook enkele globale methoden die kunnen worden gebruikt voor complexere conversies. In elk geval is typeconversie in ECMAScript een korte stap.

Omzetten naar string

Het interessante aan de primitieve waarden van Boolean, getallen en strings in ECMAScript is dat ze pseudo-objecten zijn, wat betekent dat ze in werkelijkheid eigenschappen en methoden hebben.

Bijvoorbeeld, om de lengte van een string te verkrijgen, kun je de volgende code gebruiken:

var sColor = "red";
alert(sColor.length); // Uitvoer "3"

Hoewel "red" een primitieve string is, heeft het ook de eigenschap length, bedoeld om de grootte van de string op te slaan.

Samengevat, de drie belangrijkste primitieve typen Boolean-waarden, getallen en strings hebben een toString() methode, waardoor hun waarden kunnen worden omgezet in een string.

Tip:Misschien vraag je je af, 'Heeft de string ook een toString() methode, is dit niet overbodig?' Ja, dat is inderdaad zo, want ECMAScript definieert dat alle objecten een toString() methode hebben, ongeacht of het een pseudo-object of een echt object is. Aangezien het String-type een pseudo-object is, heeft het zeker een toString() methode.

De toString() methode van het Boolean-type geeft alleen "true" of "false" weer, de resultaten worden bepaald door de waarde van de variabele:

var bFound = false;
alert(bFound.toString());	//Uitvoer "false"

De toString() methode van het Number-type is bijzonder, omdat het twee modi heeft, namelijkStandaardmodusenBasispatroonMet de standaardmodus geeft de toString() methode de numerieke waarde van het getal weer in de bijbehorende string (of het nu een geheel getal, een float of een wetenschappelijke notatie is), zoals hieronder weergegeven:

var iNum1 = 10;
var iNum2 = 10.0;
alert(iNum1.toString());	//Uitvoer "10"
alert(iNum2.toString());	//Uitvoer "10"

Aantekening:In de standaardmodus retourneert de toString() methode van het Number-type altijd de decimale weergave van het getal, ongeacht de oorspronkelijke representatie. Daarom worden getallen die in octaal of hexadecimale litteraalvorm zijn verklaard, altijd in decimale vorm weergegeven.

Met het basispatroon van de toString() methode van het Number-type, kan men met verschillendeBasisNumerieke output, bijvoorbeeld, de basis van binaire is 2, de basis van octaal is 8, en de basis van hexadecimaal is 16.

BasisHet is eigenlijk alleen een andere additie in basis, wat de parameter van de toString() methode is:

var iNum = 10;
alert(iNum.toString(2));	//Uitvoer "1010"
alert(iNum.toString(8));	//Uitvoer "12"
alert(iNum.toString(16));	//Uitvoer "A"

In het vorige voorbeeld is het getal 10 in drie verschillende vormen afgedrukt, namelijk binaire vorm, octale vorm en hexadecimale vorm. HTML gebruikt hexadecimale waarden om kleuren weer te geven, wat erg nuttig is bij het verwerken van getallen in HTML.

Aantekening:Het oproepen van toString(10) voor een getal is hetzelfde als het oproepen van toString(), ze retourneren beide de decimale vorm van het getal.

Zie ook:

Raadpleeg JavaScript referentiehandleidingBiedt gedetailleerde informatie over de toString() methode:

Converteer naar getal

ECMAScript biedt twee methoden om ongeldige oorspronkelijke waarden om te zetten naar getallen, namelijk parseInt() en parseFloat().

Zoals je mogelijk zou verwachten, converteren de een de waarde naar een integer, terwijl de ander de waarde naar een float omzet. Deze methoden werken alleen op String-typen; voor andere typen retourneert het altijd NaN.

parseInt()

Voordat parseInt() en parseFloat() de string controleren of het een numerieke waarde is, analyseren ze de string zorgvuldig.

De methode parseInt() controleert eerst het karakter op positie 0 om te bepalen of het een geldig cijfer is; als dat niet het geval is, retourneert deze methode NaN en voert geen andere acties uit. Als het karakter echter een geldig cijfer is, controleert de methode het karakter op positie 1 en voert dezelfde test uit. Dit proces gaat door tot een niet-geldig cijfer wordt gevonden, waarbij parseInt() de string voor het niet-geldige cijfer omzet naar een getal.

Bijvoorbeeld, als je de string "12345red" wilt omzetten naar een integer, dan zal parseInt() 12345 teruggeven, omdat het bij het controleren van het karakter r stopt met het detectieproces.

Numerieke litteraalgewrichten in een string worden correct omgezet naar getallen, bijvoorbeeld "0xA" wordt correct omgezet naar het getal 10. Echter, de string "22.5" wordt omgezet naar 22, omdat het decimaal teken een ongeldig teken is voor integers.

Hier zijn enkele voorbeelden:

var iNum1 = parseInt("12345red"); // teruggeeft 12345
var iNum1 = parseInt("0xA"); // teruggeeft 10
var iNum1 = parseInt("56.9"); // teruggeeft 56
var iNum1 = parseInt("red"); // teruggeeft NaN

De methode parseInt() heeft ook een basismodus die binaire, octale, hexadecimale en andere willekeurige systemen kan omzetten naar een integer. De basis wordt gespecificeerd door de tweede parameter van parseInt(), dus om een hexadecimaal getal te ontsleutelen, moet je de methode parseInt() zo aanroepen:

var iNum1 = parseInt("AF", 16); // teruggeeft 175

Natuurlijk, je kunt de methode parseInt() op deze manier aanroepen voor binair, octaal, zelfs decimaal (standaardmodus):

var iNum1 = parseInt("10", 2); // teruggeeft 2
var iNum2 = parseInt("10", 8);	// retourneert 8
var iNum3 = parseInt("10", 10);	// retourneert 10

Als een decimaal getal een leidende nul bevat, is het beter om basis 10 te gebruiken, zodat je niet onverwacht een octaalwaarde krijgt. Bijvoorbeeld:

var iNum1 = parseInt("010");	// retourneert 8
var iNum2 = parseInt("010", 8);	// retourneert 8
var iNum3 = parseInt("010", 10);	// retourneert 10

In deze code worden beide regels de string "010" geïnterpreteerd als een getal. De eerste regel ziet de string als een octaalwaarde, en interpreteert het op dezelfde manier als de tweede regel (basis 8). De laatste regel declareert de basis als 10, dus iNum3 is uiteindelijk gelijk aan 10.

Raadpleeg

Raadpleeg JavaScript referentiehandleidingGedetailleerde informatie over de methode parseInt():parseInt().

parseFloat()

De methode parseFloat() behandelt op een vergelijkbare manier als de methode parseInt(), waarbij elke karakter van de positie 0 wordt bekeken tot de eerste ongeldige karakter wordt gevonden, en de string ervoor wordt omgezet in een integer.

Tóch is voor deze methode de eerste ontstane punt een geldig karakter. Als er twee punten zijn, wordt de tweede punt gezien als ongeldig. parseFloat() converteert de tekens voor deze punt naar cijfers. Dit betekent dat de string "11.22.33" wordt geïnterpreteerd als 11.22.

Een ander verschil in de methode parseFloat() is dat de string moet worden weergegeven in decimaal formaat voor floating-pointgetallen, niet in octaal of hexadecimaal. Deze methode negeert leidende nullen, dus het octaalgetal 0102 wordt geïnterpreteerd als 102. Voor het hexadecimale getal 0xA retourneert deze methode NaN, omdat x geen geldig karakter is in floating-pointgetallen. (Aantekening:Volgens tests retourneert de specifieke implementatie van de browser 0 in plaats van NaN.)

Daarnaast heeft de methode parseFloat() geen basispatroon.

Voici quelques exempels de l'utilisation de la méthode parseFloat():

var fNum1 = parseFloat("12345red");	// retourne 12345
var fNum2 = parseFloat("0xA");	// retourne NaN
var fNum3 = parseFloat("11.2");	// retourne 11.2
var fNum4 = parseFloat("11.22.33");	// retourne 11.22
var fNum5 = parseFloat("0102");	//retourneert 102
var fNum1 = parseFloat("red");	//retourneert NaN

Probeer het zelf uit

Raadpleeg

Raadpleeg JavaScript referentiehandleidingHier zijn de gedetailleerde informatie over de methode parseFloat():parseFloat().

dwingende typeconversie

Je kunt ookDwingende typeconversie (type casting)Om de type van de te converteren waarde te verwerken. Door dwingende typeconversie kun je toegang krijgen tot specifieke waarden, zelfs als ze van een andere type zijn.

Aantekening van de auteur:Cast heeft de betekenis van "gieten", wat goed past bij het idee van "dwingende conversie".

Er zijn 3 dwingende typeconversies beschikbaar in ECMAScript:

  • Boolean(value) - De gegeven waarde omzetten in een Boolean-type;
  • Number(value) - De gegeven waarde omzetten in een getal (kan een geheel getal of een float zijn);
  • String(value) - De gegeven waarde omzetten in een string;

Door één van deze functies te gebruiken om een waarde te converteren, wordt een nieuwe waarde gecreëerd die de waarde bevat die direct wordt geconverteerd. Dit kan onverwachte gevolgen hebben.

Functie Boolean()

Als de te converteren waarde een string is met ten minste één character, een niet-0 getal of een object, zal de functie Boolean() true retourneren. Als de waarde een lege string, getal 0, undefined of null is, zal het false retourneren.

Je kunt de volgende code gebruiken om de dwingende typeconversie van Boolean te testen:

var b1 = Boolean("");		//false - lege string
var b2 = Boolean("hello");		//true - niet-lege string
var b1 = Boolean(50);		//true - niet-nul getal
var b1 = Boolean(null);		//false - null
var b1 = Boolean(0);		//false - nul
var b1 = Boolean(new object());	//true - object

Functie Number()

De functie Number() voor dwingende typeconversie is vergelijkbaar met de behandeling van de methoden parseInt() en parseFloat(), maar het converteert de hele waarde in plaats van een deel ervan.

Onthoudt je nog, dat de methoden parseInt() en parseFloat() alleen de string tot voor de eerste ongeldige character converteren, dus "1.2.3" wordt respectievelijk gecombineerd tot "1" en "1.2".

Bij het forceren van typeconversie met Number(), zal "1.2.3" NaN retourneren, omdat de gehele stringwaarde niet kan worden geconverteerd naar een getal. Als de stringwaarde volledig kan worden geconverteerd, zal Number() oordelen of de parseInt() of parseFloat() methode wordt aangeroepen.

De tabel hieronder beschrijft wat er gebeurt wanneer de Number() methode wordt aangeroepen voor verschillende waarden:

Gebruik Resultaat
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number("1.2") 1.2
Number("12") 12
Number("1.2.3") NaN
Number(new object()) NaN
Number(50) 50

String() functie

De eenvoudigste methode voor forceren van typeconversie is String(), omdat deze elke waarde kan converteren naar een string.

Om deze typeconversie uit te voeren, hoeft u alleen de toString() methode van de waarde die als parameter wordt doorgegeven aan te roepen, bijvoorbeeld 12 om te converteren naar "12", true om te converteren naar "true", false om te converteren naar "false", enz.

Het enige verschil tussen het forceren van typeconversie naar een string en het aanroepen van de toString() methode is dat de forcering van null en undefined-waarden een string kan genereren zonder een fout te veroorzaken:

var s1 = String(null);	//"null"
var oNull = null;
var s2 = oNull.toString();	//zal een fout veroorzaken

Het forceren van typeconversie is zeer nuttig bij het werken met zwakke typelanguages zoals ECMAScript, maar het moet worden verzekerd dat de waarde correct is.