le type Number - javascript tome iii

publicité
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
Number.MAX_VALUE = 1.7976931348623157e+308
Number.MIN_VALUE = 5e-324
Number.MAX_SAFE_INTEGER = 9007199254740991
Number.MIN_SAFE_INTEGER = -9007199254740991
Number.NEGATIVE_INFINITY = -Infinity
Number.NaN = NaN
Number.POSITIVE_INFINITY = Infinity
test.html:2:4
test.html:3:4
test.html:4:4
test.html:5:4
test.html:7:4
test.html:9:4
test.html:11:4
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: {…}, NEGATIVE_INFINITY: {…}, MAX_VALUE: {…}, MIN_VALUE: {…},
MAX_SAFE_INTEGER: {…}, MIN_SAFE_INTEGER: {…}, EPSILON: {…},
isFinite: {…}, …
DIASOLUKA Nz. Luyalu
2 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
}
Object.getOwnPropertyDescriptors(Number)
{…}
1. {length: {…}, name: {…}, prototype: {…}, isFinite: {…},
isInteger: {…}, …}
1. EPSILON: {
value: 2.220446049250313e-16, writable: false, enumerable: false, configurable: false}
2. MAX_SAFE_INTEGER: {
value: 9007199254740991, writable: false, enumerable: false, configurable: false}
3. MAX_VALUE: {
value: 1.7976931348623157e+308, writable: false, enumerable: false, configurable: false}
4. MIN_SAFE_INTEGER: {
value: -9007199254740991, writable: false, enumerable: false, configurable: false}
5. MIN_VALUE: {
value: 5e-324, writable: false, enumerable: false, configurable: false}
6. NEGATIVE_INFINITY: {
value: -Infinity, writable: false, enumerable: false, configurable: false}
7. NaN: {
value: NaN, writable: false, enumerable: false, configurable: false}
8. POSITIVE_INFINITY: {
value: Infinity, writable: false, enumerable: false, configurable: false}
9. isFinite: {
value: ƒ, writable: true, enumerable: false, configurable: true}
10. isInteger: {
value: ƒ, writable: true, enumerable: false, configurable: true}
11. isNaN: {
value: ƒ, writable: true, enumerable: false, configurable: true}
DIASOLUKA Nz. Luyalu
3 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
12. isSafeInteger: {
value: ƒ, writable: true, enumerable: false, configurable: true}
13. length: {
value: 1, writable: false, enumerable: false, configurable: true}
14. name: {
value: "Number", writable: false, enumerable: false, configurable: true}
15. parseFloat: {
value: ƒ, writable: true, enumerable: false, configurable: true}
16. parseInt: {
value: ƒ, writable: true, enumerable: false, configurable: true}
17. prototype: {
value: Number, writable: false, enumerable: false, configurable: false}
18. __proto__: Object
DIASOLUKA Nz. Luyalu
4 / 33 vendredi 31 mai 2019 (6:45 PM)
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 explicitement à 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” value) : 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 / 33 vendredi 31 mai 2019 (6:45 PM)
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énation) 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 convertis 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 / 33 vendredi 31 mai 2019 (6:45 PM)
"Somme
"Somme
"Somme
"Somme
"Somme
=
=
=
=
=
Le type Number
"+(4+7) -> "Somme = 11"
"+-(-4-7) -> "Somme = 11"
"+eval(4+7) -> "Somme = 11"
"+eval(4)+eval(7) -> "Somme = 47"
"+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 / 33 vendredi 31 mai 2019 (6:45 PM)
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>
DIASOLUKA Nz. Luyalu
8 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
Affichage en nombre des chiffres significatifs (nnn.ddd...) :
<script type="text/javascript">
var num = new Number(1234);
"use strict";
console.log(num.toPrecision()); // 1234
console.log(num.toPrecision(2)); // 1.2e+3
num = new Number(1234.5678);
console.log(num);
// Number
console.log(num.valueOf());
//
console.log(num.toString());
//
console.log(String(num));
//
console.log(num.toPrecision());
//
console.log(num.toPrecision(2));
//
console.log(num.toPrecision(3));
//
console.log(num.toPrecision(4));
//
console.log(num.toPrecision(9));
//
</script>
{ 1234.5678 }
1234.5678
1234.5678
1234.5678
1234.5678
1.2e+3
1.23e+3
1235
1234.56780
Affichage en pas fixe des décimales (NNN... . ddd...) :
<script type="text/javascript">
var num = new Number(123);
console.log(num.toFixed());
console.log(num.toFixed(2));
num = new Number(123.4560);
console.log(num);
//
console.log(num.valueOf());
console.log(num.toString());
console.log(String(num));
console.log(num.toFixed());
console.log(num.toFixed(2));
console.log(num.toFixed(3));
console.log(num.toFixed(4));
console.log(num.toFixed(8));
</script>
DIASOLUKA Nz. Luyalu
"use strict";
// 123
// 123.00
Number { 123.456 }
// 123.456
// 123.456
// 123.456
// 123
// 123.46
// 123.456
// 123.4560
// 123.45600000
9 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
Affichage Exponentiel (N.xx...Eee) :
<script type="text/javascript">
var num = new Number(1234);
"use strict";
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
DIASOLUKA Nz. Luyalu
10 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
console.log( new Intl.NumberFormat( "fr-BE", { "style"
: '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 "+
DIASOLUKA Nz. Luyalu
11 / 33
vendredi 31 mai 2019 (6:45 PM)
Le type Number
auj.toLocaleTimeString("fr-Fr"));
console.log(auj.toISOString("fr-Fr"));
// 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 :
DIASOLUKA Nz. Luyalu
12 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
X. Les options d’affichage de la date :
<script>
const cl=console.log;
var date = new Date(Date.UTC(+002018, 10, 24, 14, 5,
10, 250));
// identique à « var date = (new.Date()).getTime()); »
// cl((new Date()).getTime());
// cl((new Date()).getTime());
// cl((new Date()).valueOf());
var options = {
weekday: "long", year: "numeric", month: "long",
day: "numeric", hour: "2-digit", minute: "2digit",
second: "2-digit"};
var options2 = {
weekday: "short", year: "numeric", month: "short",
day: "numeric", hour: "2-digit", minute: "2digit",
second: "2-digit"};
cl(date.valueOf());
// 1543068310250
cl(date.valueOf().toLocaleString());
// 1,543,068,310,250
cl(date.toLocaleString());
// 11/24/2018, 3:05:10 PM
cl(date.toLocaleString().length);
// 22
cl("*********");
cl(date.toLocaleDateString("en-US"));
// 11/24/2018
cl(date.toLocaleDateString("fr-FR"));
// 24/11/2018
cl(date.toLocaleDateString("ja-JA"));
DIASOLUKA Nz. Luyalu
13 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
// 2018/11/24
cl(date.toLocaleDateString("en-US", options));
// Saturday, November 24, 2018, 3:05:10 PM
cl(date.toLocaleDateString("fr-FR", options));
// samedi 24 novembre 2018 à 15:05:10
cl(date.toLocaleDateString("en-US", options2));
// Sat, Nov 24, 2018, 3:05:10 PM
cl(date.toLocaleDateString("fr-FR", options2));
// sam. 24 nov. 2018 à 15:05:10
cl(date.toLocaleDateString("ja-JA", options));
// 2018?11?24???? 15:05:10
cl(date.toLocaleDateString("ja-JA", options));
// 2018?11?24???? 15:05:10
cl("*********");
cl(date.toLocaleTimeString("en-us"));
// 3:05:10 PM
cl(date.toLocaleTimeString("fr-FR"));
// 15:05:10
cl(date.toISOString("fr-FR"));
// 2018-11-24T14:05:10.250Z
cl(date.toLocaleTimeString("ja-JA"));
// 15:05:10
cl(date.toLocaleTimeString("en-us", options));
// Saturday, November 24, 2018, 3:05:10 PM
cl(date.toLocaleTimeString("fr-FR", options));
// samedi 24 novembre 2018 à 15:05:10
cl(date.toISOString("fr-FR", options));
// 2018-11-24T14:05:10.250Z
cl(date.toLocaleTimeString("en-us", options2));
DIASOLUKA Nz. Luyalu
14 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
// Sat, Nov 24, 2018, 3:05:10 PM
cl(date.toLocaleTimeString("fr-FR", options2));
// sam. 24 nov. 2018 à 15:05:10
cl(date.toLocaleTimeString("ja-JA", options2));
// 2018?11?24?(?) 15:05:10
cl(date.toLocaleTimeString("ja-JA", options2));
// 2018?11?24?(?) 15:05:10
</script>
DIASOLUKA Nz. Luyalu
15 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
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
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 intrinsèques,intégrées/incorporées, built-in dans l’objet. Elles ont des parenthè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).
DIASOLUKA Nz. Luyalu
16 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
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
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
:
DIASOLUKA Nz. Luyalu
17 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
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 « : » .
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);
DIASOLUKA Nz. Luyalu
18 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
// 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 :
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;
DIASOLUKA Nz. Luyalu
19 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
// 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 :
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).
DIASOLUKA Nz. Luyalu
20 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
<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 modifiées :
<script type="text/javascript"> "use strict";
const obj = {id: 'dias'};
////// 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 :
DIASOLUKA Nz. Luyalu
21 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
1.
« const » (définit une entité constante, identificateur qui ne peut être
redéfini) et « let » (définit une variable ou une expression de fonction) 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 :
<script type="text/javascript"> "use strict";
const cf=function(){console.log(Date())};
cf();
cf=function(){console.log(Math.PI)};
</script>
// YANDEX :
// FIREFOX :
DIASOLUKA Nz. Luyalu
22 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
// 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>
[BAIDU/YANDEX]
[FIREFOX]
DIASOLUKA Nz. Luyalu
23 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
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 :
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éfinition 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 [YANDEX]
</script>
<script type="text/javascript"> "use strict";
DIASOLUKA Nz. Luyalu
24 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
var function vf(){console.log(Math.SQRT2)};
// SyntaxError: missing variable name [FIREFOX]
// Uncaught SyntaxError: Unexpected token function [YANDEX]
</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]
[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 :
DIASOLUKA Nz. Luyalu
25 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
<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
// 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
DIASOLUKA Nz. Luyalu
26 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
function fct(p){
p[0]="Zéro", p[1]="Un";
return p;
}
</script>
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))
DIASOLUKA Nz. Luyalu
27 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
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>
Les deux entiers dans un littéral d’objet :
2
<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))
}
}
DIASOLUKA Nz. Luyalu
28 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
}
return pq
}
r=pgcd(d={n1:n1,n2:n2});
console.log("pgcd ("+n1+" & "+n2+") = "+
r+" ("+n1/r+" & "+n2/r+") ")
</script>
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+") = "+
DIASOLUKA Nz. Luyalu
29 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
r+" ("+n1/r+" & "+n2/r+") ");
</script>
B. Selon les deux principes :
PGCD ( a , b ) = PGCD ( b , a mod b )
et
PGCD ( a , 0 ) = a. :
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>
DIASOLUKA Nz. Luyalu
30 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
Kinshasa, le vendredi, 31. mai 2019 (6:45:16 PM).
Mots-clés :
Number, NaN, null, undefined, IEEE, mode strict, use strict, paramè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
institution / organisation que ce soit, étatique, paraétatique ou
privé.
DIASOLUKA Nz. Luyalu
31 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
+243 - 851278216 - 899508675 - 995624714 - 902263541 - 813572818
[email protected]
Autre Lecture :
https://www.scribd.com/document/374738470/Le-Plus-Grand-Secret-de-LaCreation
D’autres publications pouvant aussi intéresser :
• https://www.scribd.com/document/377036251/Le-Dosage-DesMedicaments-en-Cac-Cas
• https://www.scribd.com/document/377035454/Le-Hasard-DesThermometres-Non-contact-a-Infrarouge
• https://www.scribd.com/document/376222482/Petite-IntroductionAux-Fonctions-JavaScript
• https://www.scribd.com/document/376221919/La-Foi-en-Jesus-ChristPour-Quoi-Faire
• https://www.scribd.com/document/375689778/Lacuite-visuelleangulaire
• https://www.scribd.com/document/375349851/La-variable-This
• https://www.scribd.com/document/375024162/Fonctions-Imbriqueesen-JS
• https://www.scribd.com/document/374789297/Format-Interne-DesObjets-JavaScript
• https://www.scribd.com/document/374788758/Iterations-en-JavaScript
• https://www.scribd.com/document/374738470/Le-Plus-Grand-Secretde-La-Creation
• https://www.scribd.com/document/374597969/Nouvelle-Formule-dIMC-indice-de-doduite-Selon-Dr-Diasoluka
• https://www.scribd.com/document/373847209/Property-Descriptors
• https://www.scribd.com/document/373833282/l-Objet-Global-Window
DIASOLUKA Nz. Luyalu
32 / 33 vendredi 31 mai 2019 (6:45 PM)
Le type Number
• 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-DesReflexes-Pupillomoteurs
• https://www.scribd.com/document/321168468/Renseignements-Id-etAnthropometriques
• https://www.scribd.com/document/320856721/Emission-31-Jul-2016
• https://www.scribd.com/document/318182982/Complication-Visuelledu-Traitement-de-La-Malaria
• https://www.scribd.com/document/318180637/Rapport-EntreOxymetrie-Et-Type-Respiration
• https://www.scribd.com/document/315746265/Classification-DesMedicaments
• https://www.scribd.com/document/315745909/IncongruencesHeresies-et-Heterodoxies-de-la-Notion-de-Laboratoire
• https://www.scribd.com/document/315745725/Rapport-EntreOxymetrie-Et-Type-Respiration
DIASOLUKA Nz. Luyalu
33 / 33 vendredi 31 mai 2019 (6:45 PM)
Téléchargement