Vous êtes sur la page 1sur 34

Le type Number

J AVA S C R I P T (Programmation Internet) V O L . I I I


Pour Débuter
J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga
+243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818
La dernière révision de ce texte est disponible sur CD.

Le type « number » possède exactement 18’437’736’874’454’810’627 (264


- 253 + 3) valeurs double-précision 64-bit format IEEE 754-2008.

Voici quelques constantes remarquables :

<script>
console.log("Number.EPSILON = " + Number.EPSILON);
console.log("Number.MAX_VALUE = " + Number.MAX_VALUE);
console.log("Number.MIN_VALUE = " + Number.MIN_VALUE);
console.log("Number.MAX_SAFE_INTEGER = " ,
Number.MAX_SAFE_INTEGER);
console.log("Number.MIN_SAFE_INTEGER = " ,
Number.MIN_SAFE_INTEGER);
console.log("Number.NEGATIVE_INFINITY = " ,
Number.NEGATIVE_INFINITY);
console.log("Number.NaN = " + Number.NaN);
console.log("Number.POSITIVE_INFINITY = " ,
Number.POSITIVE_INFINITY);
console.log("Number.isFinite = " ,
Number.isFinite);
console.log("Number.isInteger = " ,
Number.isInteger);
console.log("Number.isNaN = " , Number.isNaN);
console.log("Number.isSafeInteger = " ,
Number.isSafeInteger);
console.log("(2.5e-324)*1 =",(2.5e-324)*1);
console.log("(2.4e-324)*1 =",(2.4e-324)*1);
</script>
Le type Number
Number.EPSILON = 2.220446049250313e-16 test.html:2:4
Number.MAX_VALUE = 1.7976931348623157e+308 test.html:3:4
Number.MIN_VALUE = 5e-324 test.html:4:4
Number.MAX_SAFE_INTEGER = 9007199254740991 test.html:5:4
Number.MIN_SAFE_INTEGER = -9007199254740991 test.html:7:4
Number.NEGATIVE_INFINITY = -Infinity test.html:9:4
Number.NaN = NaN test.html:11:4
Number.POSITIVE_INFINITY = Infinity test.html:12:4

Number.isFinite = function isFinite() test.html:14:4


Number.isInteger = function isInteger() test.html:16:4
Number.isNaN = function isNaN() test.html:18:4
Number.isSafeInteger = function isSafeInteger() test.html:19:4
(2.5e-324)*1 = 5e-324 test.html:21:4
(2.4e-324)*1 = 0 test.html:22:4

On peut aussi obtenir ces résultats avec la commande

« Object.getOwnPropertyDescriptors(Number) »

qui donne ceci à la console du browser ou dans un code JS.

Dans un code JavaScript :

<script>
console.log("Object.getOwnPropertyDescriptors(Number = " ,
Object.getOwnPropertyDescriptors(Number));
</script>

À la console du browser :

Object.getOwnPropertyDescriptors(Number)

Object {
prototype: {…}, NaN: {…}, POSITIVE_INFINITY: {…}, NEGA-
TIVE_INFINITY: {…}, MAX_VALUE: {…}, MIN_VALUE: {…},
MAX_SAFE_INTEGER: {…}, MIN_SAFE_INTEGER: {…}, EPSILON: {…},
isFinite: {…}, …
DIASOLUKA Nz. Luyalu 2 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
}

Object.getOwnPropertyDescriptors(Number)
{…}

1. {length: {…}, name: {…}, prototype: {…}, isFinite: {…},


isInteger: {…}, …}
1. EPSILON: {
value: 2.220446049250313e-16, writable: false, enumer-
able: false, configurable: false}
2. MAX_SAFE_INTEGER: {
value: 9007199254740991, writable: false, enumera-
ble: false, configurable: false}
3. MAX_VALUE: {
value: 1.7976931348623157e+308, writable: false, enu-
merable: false, configurable: false}
4. MIN_SAFE_INTEGER: {
value: -9007199254740991, writable: false, enumera-
ble: false, configurable: false}
5. MIN_VALUE: {
value: 5e-324, writable: false, enumera-
ble: false, configurable: false}
6. NEGATIVE_INFINITY: {
value: -Infinity, writable: false, enumera-
ble: false, configurable: false}
7. NaN: {
value: NaN, writable: false, enumera-
ble: false, configurable: false}
8. POSITIVE_INFINITY: {
value: Infinity, writable: false, enumera-
ble: false, configurable: false}
9. isFinite: {
value: ƒ, writable: true, enumera-
ble: false, configurable: true}
10. isInteger: {
value: ƒ, writable: true, enumerable: false, configu-
rable: true}
11. isNaN: {
value: ƒ, writable: true, enumera-
ble: false, configurable: true}

DIASOLUKA Nz. Luyalu 3 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number
12. isSafeInteger: {
value: ƒ, writable: true, enumera-
ble: false, configurable: true}
13. length: {
value: 1, writable: false, enumera-
ble: false, configurable: true}
14. name: {
value: "Number", writable: false, enumera-
ble: false, configurable: true}
15. parseFloat: {
value: ƒ, writable: true, enumera-
ble: false, configurable: true}
16. parseInt: {
value: ƒ, writable: true, enumera-
ble: false, configurable: true}
17. prototype: {
value: Number, writable: false, enumera-
ble: false, configurable: false}
18. __proto__: Object

DIASOLUKA Nz. Luyalu 4 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

I. Le NaN (Not a Number) :

Quelques types de données sont très difficiles à se figurer :

1. null : valeur que souvent vous (rarement le système) affectez ex-


plicitement à une variable pour l’initialiser à RIEN, juste pour
éviter qu’elle ait automatiquement la valeur undefined.

2. Undefined : Valeur que prend automatiquement une variable


quand elle n’est pas explicitement initialisée (même pas avec null)
lors de sa déclaration.

3. NaN (number value that is a IEEE 754 “Not-a-Number” va-


lue) : Il faut d’abord savoir qu’il n’y a pas un nombre particulier,
précis représentant le NaN. Dans IEEE 754, NaN est défini
comme tout nombre à virgule flottante dont tous les bits
d’exposant (exponent bits) sont à 1 et la partie fractionnaire
(fractional part) ayant n’importe quelle valeur différente de zéro
(any non-zero value). Donc on peut bien avoir NaN !==NaN.

II. La précédence (préséance) des opérateurs, exemple illustratif :

<script type="text/javascript"> "use strict";


var num = 10;
console.log(
5 == num / 2 && !(3 + 2 * num).toString() == false);
// Affiche true.
console.log(
5 == num / 2 && !(3 + 2 * num).toString() === "");
// Affiche false.
console.log((3 + 2 * num).toString() == false) // false
console.log(!(3 + 2 * num).toString() == false) // true
console.log((3 + 2 * num).toString() === false) //false
console.log(!(3 + 2 * num).toString() === false) // true

console.log((3 + 2 * num).toString() == "") // false


console.log(!(3 + 2 * num).toString() == "") // true
DIASOLUKA Nz. Luyalu 5 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
console.log((3 + 2 * num).toString() === "") // false
console.log(!(3 + 2 * num).toString() === "") // false
console.log(!(3 + 2 * num)) // false
</script>

III. Le typecasting :

1. Dans les opérations arithmétiques (outre l’addition = concaténa-


tion) les chaînes sont converties ("implied typecasting) en
nombres :

25 - "10" = 15 ; 25 * "10" = 250 ; 25 / "10" = 2.5...

2. Dans les opérations de concaténation (toute addition impliquant


une chaîne de caractères) ce sont les autres types qui sont conver-
tis en chaîne de caractères.

3. Dans l’addition d’un nombre et une string, le nombre est


coercé en string : 25 + "10" = "2510".
4. Dans l’addittion d’un Boolean et une string, le Boolean est
coercé en string : true + "false" = "truefalse".

5. Dans l’addition d’un nombre et un Boolean, le Boolean est coercé


en nombre : true + 10 = 11 ; false + 10 = 10.

6. Dans les opérations de comparaison, les strings (chaînes) sont


coercées en nombres : 10 < "050" = true.

Voyez donc ceci à la console :

"88"+77 -> "8877"


88+"77" -> "8877"
"88+77" -> "88+77"
88+77 -> 165
"Somme = " + 4 + 7 -> "Somme = 47"
"Somme = "+1*4+7 -> "Somme = 47"
"Somme = "+1*(4+7) -> "Somme = 11"
DIASOLUKA Nz. Luyalu 6 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
"Somme = "+(4+7) -> "Somme = 11"
"Somme = "+-(-4-7) -> "Somme = 11"
"Somme = "+eval(4+7) -> "Somme = 11"
"Somme = "+eval(4)+eval(7) -> "Somme = 47"
"Somme = "+parseInt(4)+parseInt(7) -> "Somme = 47"

Et dans un code :

<script type="text/javascript"> "use strict";


let n1=prompt("Donnez un nombre",
Math.floor(Math.random()*100));

const n2=prompt("Donnez un auttre nombre",


Math.floor(Math.random()*100));

console.log(n1+" + "+n2+" = ");


console.log(n1 + n2);
console.log(parseInt(n1) + parseInt(n2));
console.log(eval(n1) + eval(n2));

let n1e=eval(n1), n2e=eval(n2);


console.log(n1e + n2e);

let n1p=parseInt(n1), n2p=parseInt(n2);


console.log(n1p + n2p);
</script>

DIASOLUKA Nz. Luyalu 7 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

Vous pouvez forcer une coercion (conversion explicite) :

1. La fonction parseInt() covertit excplicitement un numérique litté-


ral en entier,
2. La fonction parseFloat() covertit excplicitement un numérique
littéral en nombre

Le numérique littéral doit être au début de la chaîne.

<script type="text/javascript"> "use strict";


var i = "1980 mille neuf cent quatre-vingt";
var f = "19.80 dix-neuf point quatre-vingt";

console.log(i); // 1980 mille neuf cent quatre-vingt


console.log(f); // 19.80 dix-neuf point quatre-vingt
console.log(parseInt(i)); // 1980
console.log(parseFloat(i)); // 1980
console.log(parseInt(f)); // 19
console.log(parseFloat(f)); // 19.8
</script>

Affichage en nombre des chiffres significatifs (nnn.ddd...) :


DIASOLUKA Nz. Luyalu 8 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

<script type="text/javascript"> "use strict";


var num = new Number(1234);

console.log(num.toPrecision()); // 1234
console.log(num.toPrecision(2)); // 1.2e+3

num = new Number(1234.5678);


console.log(num); // Number { 1234.5678 }
console.log(num.valueOf()); // 1234.5678
console.log(num.toString()); // 1234.5678
console.log(String(num)); // 1234.5678
console.log(num.toPrecision()); // 1234.5678
console.log(num.toPrecision(2)); // 1.2e+3
console.log(num.toPrecision(3)); // 1.23e+3
console.log(num.toPrecision(4)); // 1235
console.log(num.toPrecision(9)); // 1234.56780
</script>

Affichage en pas fixe des décimales (NNN... . ddd...) :

<script type="text/javascript"> "use strict";


var num = new Number(123);

console.log(num.toFixed()); // 123
console.log(num.toFixed(2)); // 123.00

num = new Number(123.4560);


console.log(num); // Number { 123.456 }
console.log(num.valueOf()); // 123.456
console.log(num.toString()); // 123.456
console.log(String(num)); // 123.456
console.log(num.toFixed()); // 123
console.log(num.toFixed(2)); // 123.46
console.log(num.toFixed(3)); // 123.456
console.log(num.toFixed(4)); // 123.4560
console.log(num.toFixed(8)); // 123.45600000
</script>

Affichage Exponentiel (N.xx...Eee) :


DIASOLUKA Nz. Luyalu 9 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

<script type="text/javascript"> "use strict";


var num = new Number(1234);

console.log(num.toExponential()); // 1.234e+3
console.log(num.toExponential(2)); // 1.23e+3

num = new Number(123.4560);


console.log(num); // Number { 123.456 }
console.log(num.valueOf()); // 123.456
console.log(num.toString()); // 123.456
console.log(String(num)); // 123.456
console.log(num.toExponential()); // 1.23456e+2
console.log(num.toExponential(2)); // 1.23e+2
console.log(num.toExponential(3)); // 1.235e+2
console.log(num.toExponential(4)); // 1.2346e+2
console.log(num.toExponential(8)); // 1.23456000e+2
</script>

IX. Une autre façon de formater les nombres :

<script type="text/javascript"> "use strict";


var number = Math.PI;
console.log(number); // 3.141592653589793

console.log( new Intl.NumberFormat( "fr-BE" ).format(


number ) );
// 3,142

console.log(
new Intl.NumberFormat(
"fr-BE",
{ "style" : 'currency', "currency" : 'EUR' }
)
.format( number )
); // 3,14 €

console.log( new Intl.NumberFormat( "fr-BE", { "style"


: 'currency', "currency" : 'USD' }).format( number ) );
// 3,14 $US

console.log( new Intl.NumberFormat( "fr-BE", { "style"


DIASOLUKA Nz. Luyalu 10 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
: 'currency', "currency" : 'JYN' }).format( number ) );
// 3,14 JYN

console.log( new Intl.NumberFormat( "fr-BE", { "style"


: 'currency', "currency" : 'JPY' }).format( number ) );
// 3 JPY

console.log( new Intl.NumberFormat( "fr-BE", { "style"


: 'currency', "currency" : 'LST' }).format( number ) );
// 3,14 LST

console.log( new Intl.NumberFormat( "fr-BE", { "style"


: 'currency', "currency" : 'FRC' }).format( number ) );
// 3,14 FRC
</script>

Manipulations des dates :

<script>
// Dete et heure en cours.
var auj = new Date();
var mois = auj.getMonth()+1,
jour = auj.getDate(),
an = auj.getFullYear(),
hr = auj.getHours(),
min = auj.getMinutes(),
sec = auj.getSeconds(),
mil = auj.getMilliseconds();
// Manipulation directe de chaque élément de la date.
console.log(jour + '-' + mois + '-' + an+' T '+
hr + ':' + min + ':' + sec + ':' + mil);
console.log(auj.getTime());

// RÉGLER L'ANNÉE.
auj.setFullYear(2920)
// Régler le mois.
auj.setMonth(6) // Les moins vont d'indice 0 (6=7)
// Régler le jour.
auj.setDate(15) // Les moins vont d'indice 0 (6=7)
console.log(auj.toLocaleDateString("fr-Fr")+ " T "+
auj.toLocaleTimeString("fr-Fr"));
console.log(auj.toISOString("fr-Fr"));
DIASOLUKA Nz. Luyalu 11 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
// Tous les get ont leurs équivalents set

auj.setFullYear(auj.getFullYear()+10) // AJOUTER 10 ANS.


auj.setMonth(auj.getMonth()-5) // SOUSTRAIRE 5 MOIS.
auj.setDate(auj.getDate()-14) // SOUSTRAIRE 2 SEMAINES.
console.log(auj.toLocaleDateString("fr-Fr"));

// RÉGLER LA DATE LORS DE LA CRÉATION


auj=new Date("1980 Feb 11 15 07:25:350Z")
console.log(auj.toLocaleDateString("fr-Fr")+ " T "+
auj.toLocaleTimeString("fr-Fr"));
auj=new Date("Feb 1980 11 15:07:25:350 -05:00")
console.log(auj.toLocaleDateString("fr-Fr")+ " T "+
auj.toLocaleTimeString("fr-Fr"));
</script>

Exécution avec YANDEX :

Exécution avec FIREFOX :

X. Les options d’affichage de la date :


DIASOLUKA Nz. Luyalu 12 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

<script>
var date = new Date(Date.UTC(+002018, 10, 24, 14, 5,
10, 250));
// identique à « var date = (new.Date()).getTime()); »
// console.log((new Date()).getTime());
// console.log((new Date()).getTime());
// console.log((new Date()).valueOf());

var options = {
weekday: "long", year: "numeric", month: "long",
day: "numeric", hour: "2-digit", minute: "2-
digit",
second: "2-digit"};
var options2 = {
weekday: "short", year: "numeric", month: "short",
day: "numeric", hour: "2-digit", minute: "2-
digit",
second: "2-digit"};

console.log(date.valueOf());
// 1543068310250

console.log(date.valueOf().toLocaleString());
// 1,543,068,310,250

console.log(date.toLocaleString());
// 11/24/2018, 3:05:10 PM

console.log(date.toLocaleString().length); // 22

console.log("*********");

console.log(date.toLocaleDateString("en-US"));
// 11/24/2018

console.log(date.toLocaleDateString("fr-FR"));
// 24/11/2018

console.log(date.toLocaleDateString("ja-JA"));
// 2018/11/24

console.log(date.toLocaleDateString("en-US", op-
tions));
DIASOLUKA Nz. Luyalu 13 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
// Saturday, November 24, 2018, 3:05:10 PM

console.log(date.toLocaleDateString("fr-FR", op-
tions));
// samedi 24 novembre 2018 à 15:05:10

console.log(date.toLocaleDateString("en-US", op-
tions2));
// Sat, Nov 24, 2018, 3:05:10 PM

console.log(date.toLocaleDateString("fr-FR", op-
tions2));
// sam. 24 nov. 2018 à 15:05:10

console.log(date.toLocaleDateString("ja-JA", op-
tions));
// 2018?11?24???? 15:05:10

console.log(date.toLocaleDateString("ja-JA", op-
tions));
// 2018?11?24???? 15:05:10

console.log("*********");

console.log(date.toLocaleTimeString("en-us"));
// 3:05:10 PM

console.log(date.toLocaleTimeString("fr-FR"));
// 15:05:10

console.log(date.toISOString("fr-FR"));
// 2018-11-24T14:05:10.250Z

console.log(date.toLocaleTimeString("ja-JA"));
// 15:05:10

console.log(date.toLocaleTimeString("en-us", op-
tions));
// Saturday, November 24, 2018, 3:05:10 PM

console.log(date.toLocaleTimeString("fr-FR", op-
tions));
// samedi 24 novembre 2018 à 15:05:10

DIASOLUKA Nz. Luyalu 14 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number
console.log(date.toISOString("fr-FR", options));
// 2018-11-24T14:05:10.250Z

console.log(date.toLocaleTimeString("en-us", op-
tions2));
// Sat, Nov 24, 2018, 3:05:10 PM

console.log(date.toLocaleTimeString("fr-FR", op-
tions2));
// sam. 24 nov. 2018 à 15:05:10

console.log(date.toLocaleTimeString("ja-JA", op-
tions2));
// 2018?11?24?(?) 15:05:10

console.log(date.toLocaleTimeString("ja-JA", op-
tions2));
// 2018?11?24?(?) 15:05:10
</script>

X. Récursivité (récurrence - Factorielle d’un nombre) :

<script type="text/javascript">
var vin=170;
let fact = function ( n ) {
if ( n == 0) return 1;
else return fact ( n - 1) * n ;
};
console.log(vin+"! = "+fact(vin));
</script>

// 170! = 7.257415615307994e+306
DIASOLUKA Nz. Luyalu 15 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

Note :
Nous venons de voir là une méthode de l'objet Math. En voici d'autres
ainsi que les propriétés. Les Méthodes sont des fonctions intrin-
sèques,intégrées/incorporées, built-in dans l’objet. Elles ont des paren-
thèses (). Les Propriétés n’ont pas de parenthèses et représentent,ici des
constantes. Les Propriétés et Méthodes sont accessibles via l'objet ici
l’objet Math, et leur notation DOIT donc être précédée de « Math. »
(Math avec M majuscule et le reste en minuscules, suivi d’un point sans
espace devant et après le point) :

XI. Méthodes et propriétés standards de l’objet Math :

abs(N), ceil(N), floor(N), round(N), trunc(N), max(N1,N2),


min(N1,N2), pow(B,P), random(N), sqrt(N).

Logarithmes et exponentielle avec l’objet Math :

E, exp(N), LN2, LN10, log(N), LOG2E, SQRT1_2, SQRT2.

Trigonométrie avec l’objet Math :

PI, sin(N), asin(N), cos(N), acos(N), tan(N), atan(N).

Notez la virgule de chaînage entre « k=0 » et « a.toLocaleSt... »

<script>
var a=new Date(9999,12,31).toLocaleString();
console.log(a.length);
for(k=0 , l=a.length ; k < 10 ; k++)
console.log(k*l)
</script>

// 23
// 0 23 46 69 92 115 138 161 184 207
DIASOLUKA Nz. Luyalu 16 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

Dans l’exemple qui suit, quand la condition « a<=5 ? » est remplie, le


chaînage « c = Math.pow(a,2) , d=b*b , e=2*a*b ; » ne se
passe pas comme on pourrait s’y attendre (seule la première expression
« c = Math.pow(a,2) » n’est pas exécutée , les deux autres
(« d=b*b » et « e=2*a*b » ;) sont exécutées :

<script>
var a=Math.round(Math.random()*10) ,
b=Math.ceil(Math.log(a)) ,
c=d=e=0 , v ;

v = a<=5 ?
a*a + b*b + 2*a*b
:
c = Math.pow(a,2) , d=b*b , e=2*a*b ;

console.log(v+" || "+a+"_"+b+" || "+c+"_"+d+"_"+e)


</script>

Exécution :

La condition « a<=5 ? » est remplie (a==4, inf ou == 5),


l’expression avant le double-point est exécutée, Aucune expression dans
le chaînage après ce double-point ne devrait être exécutée, mais seule la
première expression est ignorée (v a pris la valeur de l’expression « a^2
+ b^2 + 2*a*b » d’avant le double-point), « c =
Math.pow(a,2) » n’a pas été exécutée (c a gardé sa valeur initiale =
valeur d’initialisation), mais les deux autres « d=b*b » et
« e=2*a*b » ont été évaluées (exécutées).

4_2 || 0_4_16

La condition « a<=5 ? » n’est pas remplie (a==7, > 5), l’expression


avant le double-point n’est pas exécutée, toute la chaîne d’expressions
après ce « : » est exécutée. v prend la valeur de la première expression
dans la chaîne d’instructions après le « : » .
DIASOLUKA Nz. Luyalu 17 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

49 || 7_2 || 49_4_28

XII. Particularités de const, let et var :

Alors que JS en sloppy mode (mode standard) autorise d’utiliser une


variable sans la déclarer au préalable, JS en mode strict ("use strict" ;)
n’accepte pas d’utiliser une variable non, déclarée (avant ou après sa
première utilisation dans un scope donné).

En mode sloppy :

<script type="text/javascript">
d=Date(); console.log(d);
// Sat Feb 24 2018 22:21:20 GMT+0100 (Paris, Madrid)
</script>

En mode « use strict » :

<script type="text/javascript"> "use strict";


d=Date(); console.log(d);
// Sat Feb 24 2018 22:21:20 GMT+0100 (Paris, Madrid)
</script>

Yandex :

Firefox :

DIASOLUKA Nz. Luyalu 18 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

Variable déclarée avec « var » après sa première utilisation :

<script type="text/javascript"> "use strict";


d=Date(); console.log(d);
var d;
// Sat Feb 24 2018 22:34:35 GMT+0100 (Paris, Madrid)
</script>

Contrairement à « var », « let » n’admet pas de déclaration différée de


variable, mais aussi d’expression de fonction :

<script type="text/javascript"> "use strict";


d=Date(); console.log(d);
let d;
// ReferenceError: can't access lexical
// declaration `d' before initialization [FIREFOX]
//
// Uncaught ReferenceError:
// d is not defined at test.html:2 [YANDEX]
// Uncaught ReferenceError: d is not defined [BAIDU]
</script>

De même contrairement à « var », « let » n’admet pas de redéclaration


ni de redéfinition de la même variable dans le même scope :

<script type="text/javascript"> "use strict";


var v;
var v;

let l;
let l;
</script>

/* FIERFOX :
DIASOLUKA Nz. Luyalu 19 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

YANDEX :

*/

Tandis que « const » exige l’initialisation pendant l’unique déclaration


(n’accepte ni une réaffectation ni une redéclaration dans la même portée
de bloc).

<script type="text/javascript"> "use strict";


d=Date(); console.log(d);
const d;
</script>
/*
Firefox :

Yandex :

Baidu (ancienne version) :

*/

Les valeurs des propriétés d’un objet const peuvent cependant être mo-
difiées :

<script type="text/javascript"> "use strict";


const obj = {id: 'dias'};
DIASOLUKA Nz. Luyalu 20 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
////// obj = {id: 'wille'};
// TypeError:
// invalid assignment to const `obj' [FIREFOX]
// Uncaught TypeError:
// Assignment to constant variable.[YANDEX]

obj.id = 'wille';
console.log(obj); // Object { id: "wille" }
</script>

Dans les deux modes (sloppy et strict), une variable ou une expression
de fonction ne peuvent être déclarées qu’avec l’un des trois mots clés
suivants : const, let ou var, avec les spécificités suivantes :

1. « const » (définit une entité constante, identificateur qui ne peut être


redéfini) et « let » (définit une variable ou une expression de fonc-
tion) sont de portée (scope = domaine) bloc quel qu’il soit :

<script type="text/javascript"> "use strict";


{ let li=7 ; {console.log(li) /* 7 */} };
console.log(li)
// ReferenceError: li is not defined [FIREFOX]
// Uncaught ReferenceError: li is not defined [YANDEX]
</script>

<script type="text/javascript"> "use strict";


{ const ci=10 ; {console.log(ci) /* 10 */} };
console.log(ci)
// ReferenceError: ci is not defined [FIREFOX]
// Uncaught ReferenceError: ci is not defined [YANDEX]
</script>

2. Une entité « const » ne peut être redéclarée, redéfinie ou réaffectée :


DIASOLUKA Nz. Luyalu 21 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

<script type="text/javascript"> "use strict";


const cf=function(){console.log(Date())};
cf();
cf=function(){console.log(Math.PI)};
</script>

// YANDEX :

// FIREFOX :

// BAIDU :

3. « var » est de scope bloc de fonction ou fichier :

<script type="text/javascript"> "use strict";


let lg=5; const cg=20 ;
{ // Bloc vraiment ordinaire.
var vb=15;
console.log(cg);
// 20. Visible ds bloc imbriqué.
}
console.log(lg, cg, vb); // 5 20 15
// vb est visible en dehors du bloc ordin,
// mais ne le serait pas hors un bloc de fct,
// cfr ci-dessous.

const cf=function(){var vf=10;};


console.log(vf);
</script>

DIASOLUKA Nz. Luyalu 22 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

/*
[BAIDU/YANDEX]

[FIREFOX]

4. const DOIT être initialisé au même moment que sa déclaration,

<script type="text/javascript"> "use strict";


const c2;

c2="const";
</script>

/*
[FIREFOX]

[YANDEX]

[BAIDU]

*/

5. « var » et autres dans définition de fonction non expression :

DIASOLUKA Nz. Luyalu 23 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number
En mode strict, une expression de fonction DOIT être précédée de var,
const ou let pour la définition / déclaration de fonction. Mais la défini-
tion simple de fonction ne doit jamais commencer par ces mots clés.

<script type="text/javascript"> "use strict";


function f(){console.log(Math.SQRT2)};
f(); // 1.4142135623730951
</script>

<script type="text/javascript"> "use strict";


const function lf(){console.log(Math.SQRT2)};
// SyntaxError: missing variable name [FIREFOX]
// Uncaught SyntaxError: Unexpected token function [YAN-
DEX]
</script>

<script type="text/javascript"> "use strict";


var function vf(){console.log(Math.SQRT2)};
// SyntaxError: missing variable name [FIREFOX]
// Uncaught SyntaxError: Unexpected token function [YAN-
DEX]
</script>

<script type="text/javascript"> "use strict";


let function lf(){console.log(Math.SQRT2)};
// SyntaxError: let is a reserved identifier [FIREFOX]
// Uncaught SyntaxError: Unexpected strict mode reserved
word [YANDEX]
</script>

/*
[FIREFOX]

[YANDEX]

DIASOLUKA Nz. Luyalu 24 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

[BAIDU]

*/

Si une const ne peut être ni redéclarée, ni redéfinie, ni réaffectée, la


valeur qu’elle renferme peut cependant être modifiée :

<script type="text/javascript"> "use strict";


const arr = ['A','B'];
const C = arr;
// arr et C ne peuvent être
// redéclarés, redéfinis, ou réaffectés.

console.log(C);
// Array [ "A", "B" ]

// Mais la valeur de arr ou de C peuvent changer


// Méthode directe via les éléments.
[ arr[0],arr[1] ] = ['X' , 'Z'];
console.log(C);
// Array [ "X", "Z" ]

arr[0]= ["autre","array"] ;
arr[1] = {'X':'x' , 'Z':'z'};
console.dir(C);
console.dir(arr);
// […] , 0: "Zéro" , 1: "Un" , 2: "spl2" , 3: "PUSHÉ"
// length: 4

DIASOLUKA Nz. Luyalu 25 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

// Méthode directe via les méthodes...


arr.push('PUSHÉ');
arr.splice(1,1,"spl1","spl2");
console.log(C);
// Array [ […], "spl1", "spl2", "PUSHÉ" ]
// […], 0: "Zéro", 1: "Un", 2: "spl2", 3: "PUSHÉ"
// length: 4

// La valeur de arr ou de C peuvent aussi changer


// par Méthode indirecte (p.e. du sein d'une fonc-tion)
console.log("fct(C)= ",fct(C));
console.log("C=",C); // constante comme argument.
console.log("arr=",arr);
// Array [ "Zéro", "Un", "spl2", "PUSHÉ" ]
// […], 0: "Zéro", 1: "Un", 2: "spl2", 3: "PUSHÉ"
// length: 4

function fct(p){
p[0]="Zéro", p[1]="Un";
return p;
}
</script>

DIASOLUKA Nz. Luyalu 26 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

XIII. Techniques pour programmer le PGCD de deux entiers :

A. Par le biais des plus petits diviseurs communs :

1 Les deux entiers dans une array :

<script type="text/javascript"> "use strict";


var r,d,n1=2040,n2=39960

function pgcd(o){
o=o.sort().reverse() // n1 > n2
console.log(Object.values(o))
var pq=1;

for(var p=2 ; p<o[0]/2 ; p++){


for(var k=2 ; k<o[0]/2 ; k++){
if(!(o[0]%k) && !(o[1]%k)){
pq*=k; o=o.map(x=>x/k)
console.log(pq+" "+k+" "+o)
}
}
}
return pq
}

r=pgcd([n1,n2]) // L’array des deux entiers.

console.log("pgcd ("+n1+" & "+n2+") = "+


r+" ("+n1/r+" & "+n2/r+") ")
</script>

DIASOLUKA Nz. Luyalu 27 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

2 Les deux entiers dans un littéral d’objet :

<script type="text/javascript"> "use strict";


var r,d,n1=4020, n2=2040 ; // n1 >2

function pgcd(o){
console.log(Object.values(o));
var pq=1;
for(var p=2 ; p<o.n1/2 ; p++){
for(var k=2 ; k<o.n1/2 ; k++){
if(!(o.n1%k) && !(o.n2%k)){
pq*=k; o.n1/=k, o.n2/=k;
console.log(pq+" "+k+" "+Object.values(o))
}
}
}
return pq
}

r=pgcd(d={n1:n1,n2:n2});

console.log("pgcd ("+n1+" & "+n2+") = "+


r+" ("+n1/r+" & "+n2/r+") ")
</script>

DIASOLUKA Nz. Luyalu 28 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

3 Plus simple (avec des primitives) :

<script type="text/javascript"> "use strict";


var r,d,n1,n2;

function pgcd(n1,n2){
console.log(n1,n2);
var pq=1;

for(var p=2 ; p<n1/2 ; p++){


for(var k=2 ; k<n1/2 ; k++){
if(!(n1%k) && !(n2%k)){
pq*=k; n1/=k, n2/=k;
console.log(pq+" "+k+" "+n1+" "+n2);
}
}
}
return pq;
}

r=pgcd(n1=Math.round(Math.random()*1e4),
n2=Math.round(Math.random()*1e5));

console.log("pgcd ("+n1+" & "+n2+") = "+


r+" ("+n1/r+" & "+n2/r+") ");
</script>

B. Selon les deux principes :

PGCD ( a , b ) = PGCD ( b , a mod b )


et
PGCD ( a , 0 ) = a. :

DIASOLUKA Nz. Luyalu 29 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number

1 Les deux entiers dans une array :

<script type="text/javascript"> "use strict";


// PGCD(a,b) = PGCD (b,a mod b) et PGCD(a,0) = a.
var r,d,
n1=2040,n2=39972; // Les deux entiers

function pgcd(a){
a=asort(a); // n1 > n2
console.log(Object.values(a),+" "+n1+" "+n2);
var pq=1;
while(a[1]) a=[a[1], a[0]%a[1]] , console.log(a);
return a[0];
}

r=pgcd([n1,n2]); // L’array des deux entiers.

console.log("pgcd ("+n1+" & "+n2+") = "+


r+" ("+n1/r+" & "+n2/r+") ");

function asort(a){
return a.sort().reverse(); // n1 > n2
}
</script>

XIV. Définition de méthode en JavaScript :


DIASOLUKA Nz. Luyalu 30 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number

On peut définir une méthode en « inline » ou en différé.

En différé :

<script model="text/javascript"> "use strict";


function Specs (model) {
this.model = model;
this.color = "bleu";
this.dispInfo = dispSpecsInfo;
// Méthode déclarée ici, mais
// définie en différé (ailleurs).
// Notez l'absence de parenthèse.
}

function dispSpecsInfo() {
return 'Fusée '+this.model+" "+this.color;
}
// Définition "externe" de la méthode
// Specs.dispSpecsInfo().
// Inconvénients :
// 1. Peut être appelé de n'importe où,
// éventuellement générant des erreurs.
// 2. Risque de conflicts avec des fonctions
// de librairies ou de redéfinition.
// 3. Bouffe de l'espace.

var specs = new Specs('Soyouz'); // Instanciation


specs.color = "grisâtre"; // On redéfinit color
console.log(specs.dispInfo());
// Fusée Soyouz grisâtre
</script>

En ligne (inline) :

DIASOLUKA Nz. Luyalu 31 / 34 dimanche 24 mars 2019 (9:58 AM)


Le type Number
<script model="text/javascript"> "use strict";
function Specs (model) {
this.model = model;
this.color = "bleu";
this.dispInfo = dispSpecsInfo_=>
'Fusée '+this.model+" "+this.color;
// Méthode définie en inline :
// moins de codes.
}

var specs = new Specs('Soyouz'); // Instanciation


specs.color = "roussâtre"; // On redéfinit color
console.log(specs.dispInfo());
// Fusée Soyouz grisâtre
</script>

Kinshasa, le dimanche, 24. mars 2019 (9:58:07 AM).

Mots-clés :
Number, NaN, null, undefined, IEEE, mode strict, use strict, para-
mètres par défaut, initialisé, PGCD, enumerable, for...in, itérable, Ité-
ration Synchrone

DIASOLUKA Nz. Luyalu


Docteur en Médecine, Chirurgie & Accouchements (1977),
CNOM : 0866 - Spécialiste en ophtalmologie (1980)
Informaticien-amateur, Programmeur et WebMaster.

Chercheur indépendant, autonome et autofinancé, bénévole,


sans aucun conflit d’intérêt ou liens d'intérêts ou contrainte
promotionnelle avec qui qu’il soit ou quelqu’organisme ou
DIASOLUKA Nz. Luyalu 32 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
institution / organisation que ce soit, étatique, paraétatique ou
privé.

+243 - 851278216 - 899508675 - 995624714 - 902263541 - 813572818

diasfb@mail2world.com

Autre Lecture :
https://www.scribd.com/document/374738470/Le-Plus-Grand-Secret-de-La-
Creation

D’autres publications pouvant aussi intéresser :

• https://www.scribd.com/document/377036251/Le-Dosage-Des-
Medicaments-en-Cac-Cas
• https://www.scribd.com/document/377035454/Le-Hasard-Des-
Thermometres-Non-contact-a-Infrarouge
• https://www.scribd.com/document/376222482/Petite-Introduction-
Aux-Fonctions-JavaScript
• https://www.scribd.com/document/376221919/La-Foi-en-Jesus-Christ-
Pour-Quoi-Faire
• https://www.scribd.com/document/375689778/Lacuite-visuelle-
angulaire
• https://www.scribd.com/document/375349851/La-variable-This
• https://www.scribd.com/document/375024162/Fonctions-Imbriquees-
en-JS
• https://www.scribd.com/document/374789297/Format-Interne-Des-
Objets-JavaScript
• https://www.scribd.com/document/374788758/Iterations-en-JavaScript
• https://www.scribd.com/document/374738470/Le-Plus-Grand-Secret-
de-La-Creation
• https://www.scribd.com/document/374597969/Nouvelle-Formule-d-
DIASOLUKA Nz. Luyalu 33 / 34 dimanche 24 mars 2019 (9:58 AM)
Le type Number
IMC-indice-de-doduite-Selon-Dr-Diasoluka
• https://www.scribd.com/document/373847209/Property-Descriptors
• https://www.scribd.com/document/373833282/l-Objet-Global-Window
• https://www.scribd.com/document/372665249/Javascript-Tome-II
• https://www.scribd.com/document/355291488/motilite-oculaire-2
• https://www.scribd.com/document/355291239/motilite-oculaire-I
• https://www.scribd.com/document/355290248/Script-d-Analyses-Des-
Reflexes-Pupillomoteurs
• https://www.scribd.com/document/321168468/Renseignements-Id-et-
Anthropometriques
• https://www.scribd.com/document/320856721/Emission-31-Jul-2016
• https://www.scribd.com/document/318182982/Complication-Visuelle-
du-Traitement-de-La-Malaria
• https://www.scribd.com/document/318180637/Rapport-Entre-
Oxymetrie-Et-Type-Respiration
• https://www.scribd.com/document/315746265/Classification-Des-
Medicaments
• https://www.scribd.com/document/315745909/Incongruences-
Heresies-et-Heterodoxies-de-la-Notion-de-Laboratoire
• https://www.scribd.com/document/315745725/Rapport-Entre-
Oxymetrie-Et-Type-Respiration

DIASOLUKA Nz. Luyalu 34 / 34 dimanche 24 mars 2019 (9:58 AM)