JavaScript har bara en typ av nummer. Tal kan skrivas med eller utan decimaler.
let x = 3.14; // A number with decimals
let y = 3; // A number without decimals
Försök Dig själv »
Extra stora eller extra små tal kan skrivas med vetenskaplig (exponent) notation:
let x = 123e5; // 12300000
let y = 123e-5; // 0.00123
Försök Dig själv »
Till skillnad från många andra programmeringsspråk, JavaScript definierar inte olika typer av tal, som heltal, korta, långa, flyttal osv.
JavaScript-nummer lagras alltid som flyttal med dubbel precision nummer, enligt den internationella IEEE 754-standarden.
Detta format lagrar tal i 64 bitar, där talet (bråkdelen) lagras i bitar 0 till 51, exponenten i bitarna 52 till 62 och tecknet i bit 63:
Value (aka Fraction/Mantissa) | Exponent | Sign |
---|---|---|
52 bits (0 - 51) | 11 bits (52 - 62) | 1 bit (63) |
Heltal (tal utan punkt eller exponentnotation) är korrekta upp till 15 siffror.
let x = 999999999999999; // x will be 999999999999999
let y = 9999999999999999; // y will be 10000000000000000
Prova själv →
<!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 maximala antalet decimaler är 17.
Flyttalaritmetiken är inte alltid 100 % korrekt:
let x = 0.2 + 0.1;
Försök Dig själv »
För att lösa problemet ovan hjälper det att multiplicera och dividera:
let x = (0.2 * 10 + 0.1 * 10) / 10;
Prova själv →
<!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>
VARNING!!
JavaScript använder operatorn + för både addition och sammanlänkning.
Siffror läggs till. Strängar är sammanlänkade.
Om du lägger till två siffror blir resultatet ett tal:
let x = 10;
let y = 20;
let z = x + y;
Prova själv →
<!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>
Om du lägger till två strängar blir resultatet en strängsammansättning:
let x = "10";
let y = "20";
let z = x + y;
Prova själv →
<!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>
Om du lägger till ett nummer och en sträng blir resultatet en strängsammansättning:
let x = 10;
let y = "20";
let z = x + y;
Prova själv →
<!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>
Om du lägger till en sträng och ett nummer blir resultatet en strängsammansättning:
let x = "10";
let y = 20;
let z = x + y;
Prova själv →
<!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>
Ett vanligt misstag är att förvänta sig att resultatet blir 30:
let x = 10;
let y = 20;
let z = "The result is: " + x + y;
Prova själv →
<!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>
Ett vanligt misstag är att förvänta sig att resultatet blir 102030:
let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;
Prova själv →
<!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-tolken fungerar från vänster till höger.
Första 10 + 20 läggs till eftersom x och y båda är tal.
Sedan är 30 + "30" sammanlänkade eftersom z är en sträng.
JavaScript-strängar kan ha numeriskt innehåll:
let x = 100; // x is a number
let y = "100"; // y is a
string
JavaScript kommer att försöka konvertera strängar till tal i alla numeriska operationer:
Detta kommer att fungera:
let x = "100";
let y = "10";
let z = x / y;
Prova själv →
<!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>
Detta kommer också att fungera:
let x = "100";
let y = "10";
let z = x * y;
Prova själv →
<!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>
Och det här kommer att fungera:
let x = "100";
let y = "10";
let z = x - y;
Prova själv →
<!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 detta kommer inte att fungera:
let x = "100";
let y = "10";
let z = x + y;
Prova själv →
<!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 sista exemplet använder JavaScript operatorn + för att sammanfoga strängarna.
NaN
är ett reserverat JavaScript-ord som indikerar att ett nummer inte är ett lagligt nummer.
Att försöka göra aritmetik med en icke-numerisk sträng kommer att resultera i NaN
(Inte en Siffra):
let x = 100 / "Apple";
Prova själv →
<!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 om strängen är numerisk blir resultatet a siffra:
let x = 100 / "10";
Prova själv →
<!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 använda den globala JavaScript-funktionen isNaN()
för att ta reda på om ett värde inte är ett tal:
let x = 100 / "Apple";
isNaN(x);
Prova själv →
<!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>
Se upp för NaN
. Om du använder NaN
i en matematisk operation blir resultatet också NaN
:
let x = NaN;
let y = 5;
let z = x + y;
Prova själv →
<!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 vara en sammanlänkning som NaN5:
let x = NaN;
let y = "5";
let z = x + y;
Prova själv →
<!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
är ett tal: typ av NaN
returnerar nummer
:
typeof NaN;
Prova själv →
<!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
) är värdet JavaScript returnerar om du beräknar ett tal utanför det största möjligt antal.
let myNumber = 2;
// Execute until Infinity
while (myNumber != Infinity) {
myNumber = myNumber * myNumber;
}
Division med 0 (noll) genererar också Infinity
:
let x = 2 / 0;
let y = -2 / 0;
Prova själv →
<!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
är ett tal: typeof Infinity
returnerar nummer
.
typeof Infinity;
Prova själv →
<!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 tolkar numeriska konstanter som hexadecimala om de föregås av 0x.
let x = 0xFF;
Prova själv →
<!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 ett tal med en inledande nolla (som 07).
Vissa JavaScript-versioner tolkar tal som oktala om de skrivs med en inledande nolla.
Som standard visar JavaScript siffror som bas 10 decimaler.
Men du kan använda metoden toString()
för att mata ut tal från bas 2 till bas 36.
Hexadecimal är bas 16. Decimal är bas 10. Octal är bas 8. Binär är bas 2.
let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(12);
myNumber.toString(10);
myNumber.toString(8);
myNumber.toString(2);
Prova själv →
<!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 är JavaScript-nummer primitiva värden skapade från bokstavliga ord:
let x = 123;
Men siffror kan också definieras som objekt med nyckelordet new
:
let y = new Number(123);
let x = 123;
let y = new Number(123);
Skapa inte Number-objekt.
Nyckelordet nya
komplicerar koden och saktar ner körningshastigheten.
Antal objekt kan ge oväntade resultat:
När du använder operatorn ==
är x och y lika:
let x = 500;
let y = new Number(500);
Prova själv →
<!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 använder operatorn ===
är x och y inte lika.
let x = 500;
let y = new Number(500);
Prova själv →
<!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>
Observera skillnaden mellan (x==y)
och (x===y)
.
(x == y)
sant eller falskt?
let x = new Number(500);
let y = new Number(500);
Prova själv →
<!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)
sant eller falskt?
let x = new Number(500);
let y = new Number(500);
Prova själv →
<!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>
Att jämföra två JavaScript-objekt returnerar alltid false.
För en fullständig nummerreferens, besök vår:
Fyll i JavaScript-nummerreferens.
Referensen innehåller beskrivningar och exempel på alla nummeregenskaper och metoder.