18. Οι Αριθμοί στην JavaScript

JS Numbers


Η JavaScript έχει μόνο έναν τύπο αριθμών. Οι αριθμοί μπορούν να γραφτούν με ή χωρίς δεκαδικά ψηφία.


Παράδειγμα

var x = 3.14;    // A number with decimals
var y = 3;       // A number without decimals

Δοκιμάστε τον εαυτό σας »

Πολύ μεγάλοι ή πολύ μικρότεροι αριθμοί μπορούν να γραφτούν με επιστημονική (εκθετική) σημειογραφία:

Παράδειγμα

var x = 123e5;    // 12300000
var y = 123e-5;   // 0.00123

Δοκιμάστε τον εαυτό σας »


Οι αριθμοί JavaScript είναι πάντα 64-bit κινητής υποδιαστολής

Σε αντίθεση με πολλές άλλες γλώσσες προγραμματισμού, το JavaScript δεν ορίζει διαφορετικούς τύπους αριθμών, όπως ακέραιους, μικρούς, μεγάλους, floating-point κ.λπ.

Οι αριθμοί JavaScript αποθηκεύονται πάντα ως αριθμοί κινητής υποδιαστολής διπλής ακρίβειας, σύμφωνα με το διεθνές πρότυπο IEEE 754.

Αυτή η μορφή αποθηκεύει τους αριθμούς σε 64 bits, όπου ο αριθμός (fraction) αποθηκεύεται σε bits 0 έως 51, ο εκθέτης σε bits 52 έως 62 και το sign σε 63 bit :

Τιμή (aka Fraction / Mantisa) Exponent Sign
52 bits (0-51) 11 bits (52 – 62)1 bit (63)

Ακρίβεια

Οι ακέραιοι αριθμοί (αριθμοί χωρίς περίοδο ή εκθετική σήμανση) είναι ακριβείς έως 15 ψηφία.

Παράδειγμα

var x = 999999999999999;   // x will be 999999999999999
var y = 9999999999999999;  // y will be 10000000000000000

Δοκιμάστε τον εαυτό σας »

Ο μέγιστος αριθμός δεκαδικών είναι 17, αλλά τα αριθμητικά με κυμαινόμενο σημείο υποδιαστολής δεν είναι πάντα 100% ακριβή:

Παράδειγμα

var x = 0.2 + 0.1;         // x will be 0.30000000000000004

Δοκιμάστε τον εαυτό σας »

Για να λύσουμε το παραπάνω πρόβλημα, βοηθάει να πολλαπλασιάσουμε και να διαιρέσουμε:

Παράδειγμα

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x will be 0.3

Δοκιμάστε τον εαυτό σας »


Προσθήκη αριθμών και συμβολοσειρών

ΠΡΟΣΟΧΗ!

Η JavaScript χρησιμοποιεί τον τελεστή + για την πρόσθεση και τη συνένωση.

Οι αριθμοί προστίθενται. Οι συμβολοσειρές συνενώνονται.

Αν προσθέσετε δύο αριθμούς, το αποτέλεσμα θα είναι ένας αριθμός:

Παράδειγμα

var x = 10;
var y = 20;
var z = x + y;           // z will be 30 (a number)

Δοκιμάστε τον εαυτό σας »

Αν προσθέσετε δύο συμβολοσειρές, το αποτέλεσμα θα είναι μια συνένωση συμβολοσειρών:

Παράδειγμα

var x = "10";
var y = "20";
var z = x + y;           // z will be 1020 (a string)

Δοκιμάστε τον εαυτό σας »

Αν προσθέσετε έναν αριθμό και μια συμβολοσειρά, το αποτέλεσμα θα είναι μια συνένωση συμβολοσειρών:

Παράδειγμα

var x = 10;
var y = "20";
var z = x + y;           // z will be 1020 (a string)

Δοκιμάστε τον εαυτό σας »

Αν προσθέσετε μια συμβολοσειρά και έναν αριθμό, το αποτέλεσμα θα είναι μια συνένωση συμβολοσειρών:

Παράδειγμα

var x = "10";
var y = 20;
var z = x + y;           // z will be 1020 (a string)

Δοκιμάστε τον εαυτό σας »

Ένα κοινό λάθος είναι να περιμένουμε αυτό το αποτέλεσμα να είναι 30:

Παράδειγμα

var x = 10;
var y = 20;
var z = "The result is: " + x + y;

Δοκιμάστε τον εαυτό σας »

Ένα κοινό λάθος είναι να περιμένουμε αυτό το αποτέλεσμα να είναι 102030:

Παράδειγμα

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;

Δοκιμάστε τον εαυτό σας »

Ο ερμηνευτής JavaScript λειτουργεί από αριστερά προς τα δεξιά.

Αρχικά προστίθενται 10 + 20 επειδή τα x και y είναι και οι δύο αριθμοί.

Στη συνέχεια 30 + “30” συνδέεται επειδή z είναι μια συμβολοσειρά.


Αριθμητικές συμβολοσειρές

Οι συμβολοσειρές JavaScript μπορούν να έχουν αριθμητικό περιεχόμενο:

var x = 100;         // x is a number

var y = "100";       // y is a string

Η JavaScript θα προσπαθήσει να μετατρέψει τις συμβολοσειρές σε αριθμούς σε όλες τις αριθμητικές λειτουργίες:

Αυτό θα λειτουργήσει:

var x = "100";
var y = "10";
var z = x / y;       // z will be 10

Δοκιμάστε τον εαυτό σας »

Αυτό θα λειτουργήσει επίσης:

var x = "100";
var y = "10";
var z = x * y;       // z will be 1000

Δοκιμάστε τον εαυτό σας »

Και αυτό θα λειτουργήσει:

var x = "100";
var y = "10";
var z = x - y;       // z will be 90

Δοκιμάστε τον εαυτό σας »

Αλλά αυτό δεν θα λειτουργήσει:

var x = "100";
var y = "10";
var z = x + y;       // z will not be 110 (It will be 10010)

Δοκιμάστε τον εαυτό σας »

Στο τελευταίο παράδειγμα, το JavaScript χρησιμοποιεί τον τελεστή + για τη συνένωση των συμβολοσειρών.


NaN – Not a Number

Το NaN είναι μια δεσμευμένη λέξη JavaScript που υποδεικνύει ότι ένας αριθμός δεν είναι ένας επιτρεπτός αριθμός.

Η προσπάθεια να κάνετε αριθμητική με μια μη-αριθμητική συμβολοσειρά θα έχει ως αποτέλεσμα το NaN(Not a Number):

Παράδειγμα

var x = 100 / "Apple";  // x will be NaN (Not a Number)

Δοκιμάστε τον εαυτό σας »

Ωστόσο, εάν η συμβολοσειρά περιέχει μια αριθμητική τιμή, το αποτέλεσμα θα είναι ένας αριθμός:

Παράδειγμα

var x = 100 / "10";     // x will be 10

Δοκιμάστε τον εαυτό σας »

Μπορείτε να χρησιμοποιήσετε τη σφαιρική συνάρτηση JavaScript isNaN()για να μάθετε αν μια τιμή είναι ένας αριθμός:

Παράδειγμα

var x = 100 / "Apple";
isNaN(x);               // returns true because x is Not a Number

Δοκιμάστε τον εαυτό σας »

Προσέξτε για το NaN. Εάν χρησιμοποιείσετε NaNσε μαθηματική πράξη, το αποτέλεσμα θα είναι επίσης NaN:

Παράδειγμα

var x = NaN;
var y = 5;
var z = x + y;         // z will be NaN

Δοκιμάστε τον εαυτό σας »

Ή το αποτέλεσμα μπορεί να είναι μια συνένωση:

Παράδειγμα

var x = NaN;
var y = "5";
var z = x + y;         // z will be NaN5

Δοκιμάστε τον εαυτό σας »

Το NaN είναι ένας αριθμός: Το typeof NaN επιστρέφει number:

Παράδειγμα

typeof NaN;            // returns "number"

Δοκιμάστε τον εαυτό σας »


Άπειρο

Το Infinity(ή -Infinity) είναι η τιμή που θα επιστρέψει η JavaScript εάν υπολογίσετε έναν αριθμό εκτός του μεγαλύτερου δυνατού αριθμού.

Παράδειγμα

var myNumber = 2;
while (myNumber != Infinity) {   // Execute until Infinity
  myNumber = myNumber * myNumber;
}

Δοκιμάστε τον εαυτό σας »

Η διαίρεση με 0 (μηδέν) παράγει επίσης Infinity:

Παράδειγμα

var x =  2 / 0;       // x will be Infinity
var y = -2 / 0;       // y will be -Infinity

Δοκιμάστε τον εαυτό σας »

Το Infinityείναι ένας αριθμός: Το typeof Infinityεπιστρέφει number.

Παράδειγμα

typeof Infinity;     // returns "number"

Δοκιμάστε τον εαυτό σας »


Δεκαεξαδικό

Η JavaScript ερμηνεύει τις αριθμητικές σταθερές ως δεκαεξαδικές εάν προηγείται από αυτές το 0x.

Παράδειγμα

var x = 0xFF;        // x will be 255

Δοκιμάστε τον εαυτό σας »

Ποτέ μην γράφετε έναν αριθμό που ξεκινά από μηδέν (όπως το 07).
Ορισμένες εκδόσεις JavaScript ερμηνεύουν τους αριθμούς ως οκταδικούς εάν είναι γραμμένοι με αρχικό ψηφίο το μηδέν.

Από προεπιλογή, το JavaScript εμφανίζει αριθμούς ως 10 δεκαδικά ψηφία.

Αλλά μπορείτε να χρησιμοποιήσετε τη μέθοδο toString() για την εξαγωγή αριθμών με βάση 2 ως βάση 36 .

Το δεκαεξαδικό έχει βάση 16 . Το δεκαδικό έχει βάση 10 . Το οκταδικό έχει βάση 8 . Το δυαδικό έχει βάση 2 .

Παράδειγμα

var myNumber = 32;
myNumber.toString(10);  // returns 32
myNumber.toString(32);  // returns 10
myNumber.toString(16);  // returns 20
myNumber.toString(8);   // returns 40
myNumber.toString(2);   // returns 100000

Δοκιμάστε τον εαυτό σας »


Οι αριθμοί μπορούν να είναι αντικείμενα

Κανονικά οι αριθμοί JavaScript είναι πρωτότυπες τιμές που έχουν δημιουργηθεί από κυριολεκτικά αριθμητικά (literals):

var x = 123;

Αλλά οι αριθμοί μπορούν επίσης να οριστούν ως αντικείμενα με τη λέξη-κλειδί new:

var y = new Number(123);

Παράδειγμα

var x = 123;
var y = new Number(123);

// typeof x returns number
// typeof y returns object

Δοκιμάστε τον εαυτό σας »

Μην δημιουργείτε αντικείμενα αριθμών. Αναστέλλει την ταχύτητα εκτέλεσης.
Η new keyword περιπλέκει τον κώδικα. Αυτό μπορεί να προκαλέσει κάποια απροσδόκητα αποτελέσματα:

Όταν χρησιμοποιείτε τον τελεστή == , ίσοι αριθμοί είναι ίσοι:

Παράδειγμα

var x = 500;             
var y = new Number(500);

// (x == y) is true because x and y have equal values

Δοκιμάστε τον εαυτό σας »

Όταν χρησιμοποιείτε τον τελεστή ===, ίσοι αριθμοί δεν είναι ίσοι, επειδή ο === τελεστής απαιτεί την ισότητα τόσο στον τύπο όσο και στην τιμή.

Παράδειγμα

var x = 500;             
var y = new Number(500);

// (x === y) is false because x and y have different types

Δοκιμάστε τον εαυτό σας »

Ή ακόμα χειρότερα. Τα αντικείμενα δεν μπορούν να συγκριθούν:

Παράδειγμα

var x = new Number(500);             
var y = new Number(500);

// (x == y) is false because objects cannot be compared

Δοκιμάστε τον εαυτό σας »

Σημειώστε τη διαφορά μεταξύ (x==y) και (x===y).
Η σύγκριση δύο αντικειμένων JavaScript θα επιστρέψει πάντα false.


Days
Hours
Minutes

18. Οι Αριθμοί στην JavaScript

Κοινοποίηση

Share on facebook
Share on twitter

Ακολουθήστε μας

Αρέσει σε %d bloggers: