JavaScript har kun én type nummer. Tal kan skrives med eller uden decimaler.
let x = 3.14; // A number with decimals
let y = 3; // A number without decimals
Prøv det Dig selv "
Ekstra store eller ekstra små tal kan skrives med videnskabelig (eksponent) notation:
let x = 123e5; // 12300000
let y = 123e-5; // 0.00123
Prøv det Dig selv "
I modsætning til mange andre programmeringssprog, JavaScript definerer ikke forskellige typer tal, såsom heltal, korte, lange, flydende komma osv.
JavaScript-numre gemmes altid som flydende komma med dobbelt præcision numre efter den internationale IEEE 754-standard.
Dette format gemmer tal i 64 bit, hvor tallet (brøken) gemmes i bit 0 til 51, eksponenten i bit 52 til 62 og tegnet i bit 63:
Value (aka Fraction/Mantissa) | Exponent | Sign |
---|---|---|
52 bits (0 - 51) | 11 bits (52 - 62) | 1 bit (63) |
Heltal (tal uden punktum eller eksponentnotation) er nøjagtige op til 15 cifre.
let x = 999999999999999; // x will be 999999999999999
let y = 9999999999999999; // y will be 10000000000000000
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Numbers</h1>
<h2>Integer Precision</h2>
<p>Integers (numbers without a period or exponent notation) are accurate up to 15 digits:</p>
<p id="demo"></p>
<script>
let x = 999999999999999;
let y = 9999999999999999;
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>
</body>
</html>
Det maksimale antal decimaler er 17.
Flydende kommaaritmetik er ikke altid 100 % nøjagtig:
let x = 0.2 + 0.1;
Prøv det Dig selv "
For at løse problemet ovenfor hjælper det at gange og dividere:
let x = (0.2 * 10 + 0.1 * 10) / 10;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>Floating point arithmetic is not always 100% accurate:</p>
<p id="demo1"></p>
<p>But it helps to multiply and divide:</p>
<p id="demo2"></p>
<script>
let x = 0.2 + 0.1;
document.getElementById("demo1").innerHTML = "0.2 + 0.1 = " + x;
let y = (0.2*10 + 0.1*10) / 10;
document.getElementById("demo2").innerHTML = "0.2 + 0.1 = " + y;
</script>
</body>
</html>
ADVARSEL!!
JavaScript bruger operatoren + til både tilføjelse og sammenkædning.
Tal tilføjes. Strenge er sammenkædet.
Hvis du tilføjer to tal, vil resultatet være et tal:
let x = 10;
let y = 20;
let z = x + y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>If you add two numbers, the result will be a number:</p>
<p id="demo"></p>
<script>
let x = 10;
let y = 20;
let z = x + y;
document.getElementById("demo").innerHTML = z;
</script>
</body>
</html>
Hvis du tilføjer to strenge, vil resultatet være en strengsammenkædning:
let x = "10";
let y = "20";
let z = x + y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>If you add two numeric strings, the result will be a concatenated string:</p>
<p id="demo"></p>
<script>
let x = "10";
let y = "20";
let z = x + y;
document.getElementById("demo").innerHTML = z;
</script>
</body>
</html>
Hvis du tilføjer et tal og en streng, vil resultatet være en strengsammenkædning:
let x = 10;
let y = "20";
let z = x + y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>If you add a number and a numeric string, the result will be a concatenated string:</p>
<p id="demo"></p>
<script>
let x = 10;
let y = "20";
let z = x + y;
document.getElementById("demo").innerHTML = z;
</script>
</body>
</html>
Hvis du tilføjer en streng og et tal, vil resultatet være en strengsammenkædning:
let x = "10";
let y = 20;
let z = x + y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>If you add a numeric string and a number, the result will be a concatenated string:</p>
<p id="demo"></p>
<script>
let x = "10";
let y = 20;
document.getElementById("demo").innerHTML = "The result is: " + x + y;
</script>
</body>
</html>
En almindelig fejl er at forvente, at dette resultat er 30:
let x = 10;
let y = 20;
let z = "The result is: " + x + y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>A common mistake is to expect this result to be 30:</p>
<p id="demo"></p>
<script>
var x = 10;
var y = 20;
document.getElementById("demo").innerHTML =
"The result is: " + x + y;
</script>
</body>
</html>
En almindelig fejl er at forvente, at dette resultat er 102030:
let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>A common mistake is to expect this result to be 102030:</p>
<p id="demo"></p>
<script>
let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;
document.getElementById("demo").innerHTML = result;
</script>
</body>
</html>
JavaScript-fortolkeren arbejder fra venstre mod højre.
De første 10 + 20 tilføjes, fordi x og y begge er tal.
Så er 30 + "30" sammenkædet, fordi z er en streng.
JavaScript-strenge kan have numerisk indhold:
let x = 100; // x is a number
let y = "100"; // y is a
string
JavaScript vil forsøge at konvertere strenge til tal i alle numeriske operationer:
Dette vil virke:
let x = "100";
let y = "10";
let z = x / y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>JavaScript will try to convert strings to numbers when dividing:</p>
<p id="demo"></p>
<script>
let x = "100";
let y = "10";
let z = x / y;
document.getElementById("demo").innerHTML = z;
</script>
</body>
</html>
Dette vil også fungere:
let x = "100";
let y = "10";
let z = x * y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>JavaScript will try to convert strings to numbers when multiplying:</p>
<p id="demo"></p>
<script>
let x = "100";
let y = "10";
let z = x * y;
document.getElementById("demo").innerHTML = z;
</script>
</body>
</html>
Og dette vil virke:
let x = "100";
let y = "10";
let z = x - y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>JavaScript will try to convert strings to numbers when subtracting:</p>
<p id="demo"></p>
<script>
let x = "100";
let y = "10";
let z = x - y;
document.getElementById("demo").innerHTML = z;
</script>
</body>
</html>
Men dette vil ikke virke:
let x = "100";
let y = "10";
let z = x + y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>JavaScript will NOT convert strings to numbers when adding:</p>
<p id="demo"></p>
<script>
let x = "100";
let y = "10";
let z = x + y;
document.getElementById("demo").innerHTML = z;
</script>
</body>
</html>
I det sidste eksempel bruger JavaScript operatoren + til at sammenkæde strengene.
NaN
er et JavaScript reserveret ord, der angiver, at et nummer ikke er et lovligt nummer.
At forsøge at lave regnestykker med en ikke-numerisk streng vil resultere i NaN
(ikke en Nummer):
let x = 100 / "Apple";
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>A number divided by a non-numeric string becomes NaN (Not a Number):</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 100 / "Apple";
</script>
</body>
</html>
Men hvis strengen er numerisk, vil resultatet være en nummer:
let x = 100 / "10";
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>A number divided by a numeric string becomes a number:</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 100 / "10";
</script>
</body>
</html>
Du kan bruge den globale JavaScript-funktion isNaN()
for at finde ud af, om en værdi ikke er et tal:
let x = 100 / "Apple";
isNaN(x);
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>You can use the global JavaScript function isNaN() to find out if a value is not a number:</p>
<p id="demo"></p>
<script>
let x = 100 / "Apple";
document.getElementById("demo").innerHTML = isNaN(x);
</script>
</body>
</html>
Pas på NaN
. Hvis du bruger NaN
i en matematisk operation, vil resultatet også være NaN
:
let x = NaN;
let y = 5;
let z = x + y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>If you use NaN in a mathematical operation, the result will also be NaN:</p>
<p id="demo"></p>
<script>
let x = NaN;
let y = 5;
document.getElementById("demo").innerHTML = x + y;
</script>
</body>
</html>
Eller resultatet kan være en sammenkædning som NaN5:
let x = NaN;
let y = "5";
let z = x + y;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>If you use NaN in a mathematical operation, the result can be a concatenation:</p>
<p id="demo"></p>
<script>
let x = NaN;
let y = "5";
document.getElementById("demo").innerHTML = x + y;
</script>
</body>
</html>
NaN
er et tal: typeof NaN
returnerer tal
:
typeof NaN;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>The typeof NaN is number:</p>
<p id="demo"></p>
<script>
let x = NaN;
document.getElementById("demo").innerHTML = typeof x;
</script>
</body>
</html>
Infinity
(eller -Infinity
) er den værdi, JavaScript returnerer, hvis du beregner et tal uden for den største muligt antal.
let myNumber = 2;
// Execute until Infinity
while (myNumber != Infinity) {
myNumber = myNumber * myNumber;
}
Division med 0 (nul) genererer også Infinity
:
let x = 2 / 0;
let y = -2 / 0;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>Division by zero generates Infinity;</p>
<p id="demo"></p>
<script>
let x = 2/0;
let y = -2/0;
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>
</body>
</html>
Infinity
er et tal: typeof Infinity
returnerer tal
.
typeof Infinity;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>Infinity is a number:</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = typeof Infinity;
</script>
</body>
</html>
JavaScript fortolker numeriske konstanter som hexadecimale, hvis de indledes med 0x.
let x = 0xFF;
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>Numeric constants, preceded by 0x, are interpreted as hexadecimal:</p>
<p id="demo"></p>
<script>
let x = 0xFF;
document.getElementById("demo").innerHTML = "0xFF = " + x;
</script>
</body>
</html>
Skriv aldrig et tal med et indledende nul (som 07).
Nogle JavaScript-versioner fortolker tal som oktale, hvis de skrives med et indledende nul.
Som standard viser JavaScript tal som grundlag 10 decimaler.
Men du kan bruge metoden toString()
til at udlæse tal fra grundlag 2 til basis 36.
Hexadecimal er grundlag 16. Decimal er grundtal 10. Oktal er basis 8. Binær er basis 2.
let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(12);
myNumber.toString(10);
myNumber.toString(8);
myNumber.toString(2);
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>The toString() method can output numbers from base 2 to 36:</p>
<p id="demo"></p>
<script>
let myNumber = 32;
document.getElementById("demo").innerHTML =
"Decimal 32 = " + "<br><br>" +
"Hexatrigesimal (base 36): " + myNumber.toString(36) + "<br>" +
"Duotrigesimal (base 32): " + myNumber.toString(32) + "<br>" +
"Hexadecimal (base 16): " + myNumber.toString(16) + "<br>" +
"Duodecimal (base 12): " + myNumber.toString(12) + "<br>" +
"Decimal (base 10): " + myNumber.toString(10) + "<br>" +
"Octal (base 8): " + myNumber.toString(8) + "<br>" +
"Binary (base 2): " + myNumber.toString(2);
</script>
</body>
</html>
Normalt er JavaScript-numre primitive værdier skabt ud fra bogstaver:
let x = 123;
Men tal kan også defineres som objekter med søgeordet new
:
let y = new Number(123);
let x = 123;
let y = new Number(123);
Opret ikke Number-objekter.
nye
søgeordet komplicerer koden og sænker udførelseshastigheden.
Nummerobjekter kan give uventede resultater:
Når du bruger ==
operatoren, er x og y lige:
let x = 500;
let y = new Number(500);
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>Numbers and Number objects cannot be safely compared:</p>
<p id="demo"></p>
<script>
// x is a number
let x = 500;
// y is an object
let y = new Number(500);
document.getElementById("demo").innerHTML = (x==y);
</script>
</body>
</html>
Når du bruger ===
operatoren, er x og y ikke ens.
let x = 500;
let y = new Number(500);
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>Numbers and Number objects cannot be safely compared:</p>
<p id="demo"></p>
<script>
// x is a number
let x = 500;
// y is an object
let y = new Number(500);
document.getElementById("demo").innerHTML = (x===y);
</script>
</body>
</html>
Bemærk forskellen mellem (x==y)
og (x===y)
.
(x == y)
sand eller falsk?
let x = new Number(500);
let y = new Number(500);
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>JavaScript objects cannot be compared:</p>
<p id="demo"></p>
<script>
// x is an object
let x = new Number(500);
// y is an object
let y = new Number(500);
document.getElementById("demo").innerHTML = (x==y);
</script>
</body>
</html>
(x === y)
sand eller falsk?
let x = new Number(500);
let y = new Number(500);
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Numbers</h2>
<p>JavaScript objects cannot be compared:</p>
<p id="demo"></p>
<script>
// x is an object
let x = new Number(500);
// y is an object
let y = new Number(500);
document.getElementById("demo").innerHTML = (x===y);
</script>
</body>
</html>
Sammenligning af to JavaScript-objekter returnerer altid falsk.
For en komplet nummerreference, besøg vores:
Komplet JavaScript-nummerreference.
Referencen indeholder beskrivelser og eksempler på alle talegenskaber og metoder.