Javascript & Algorithmique
Javascript & Algorithmique
Javascript & Algorithmique
ALGORITHMIQUE
(A l-Khwârizmî)
N ° I - lundi 11 mars 2019 (7:36:03 AM)
Pour Débuter
J.B. Dadet. DIASOLUKA Nz. Luyalu
La prétention primaire de cette série est de tremper vos mains [ peut-être pour votre
toute première fois ] dans le langage de programmation Internet « JavaScript »
(démarqué de la forme originale inventée par SUN) en vous enseignant par l’exemple
ses principes et sa puissance avec moult algorithmes pour informa-tiser d’autres
domaines.
L’objectif final de cette série d’opuscules est de motiver tout un chacun à devenir un
crac de la programmation Internet et à l’Algorithmique.
Document
o Root Element : <HTML>
Element : <Head>
Element : <Title>
Text : <Mon Titre>
o Element : <Body>
Element : <a>
Attribute : "href"
Text : "Mon lien"
Element : <div>
Text : "Ma division"
Ne ratez aucun numéro : Please, Click for details inside ●●●>
-[0]851278216 -[0]991239212 -[0]899508675 -[0]15149280 -[0]813572818
JAVASCRIPT && ALGORITHMIQUE
MS-JAVASCRIPT & ALGORITHMIQUE
Définition :
JavaScript est un langage orienté objet plus ou moins basé sur le langage C++
dans sa syntaxe, sa logique et ses opérateurs (voir le fascicule sur « les opéra-
teurs spécifiques du langage C++ » du même auteur).
Pour exécuter les exemples contenus dans cette série, vous pouvez saisir le code
source soit
CSS :
topstyle, css_editor, EngInSite CSS Editor, RapidCSS ,
Perl :
ActivePerl, DzPERL, perl-studio, ou Python…
PHP :
DzPHP, PHPPRO, PHPXEDIT, php, php_editor_php, phpBB, phpedit, phpmagic,
phpmkr, rapidphp, Top PHP Studio, tphpstudio, Winsyntax ,
HTML :
BowPad, Sublime Text, EditPlus, EditPad Pro, NotePad++, Crimson ou Emerald
(Emurasoft EmEditor), AkelPad, FocusWriter, UltraEdit, UEStudio, 010 Editor, ged-
it, jEdit, JetBrains WebStorm, IntelliJ IDEA, Kate, Editra, crisp, Aptana Studio, At-
om, Menicucci Editeur, TEdit, ED for Windows, AptEdit, BestAddressHTML, webuild,
Boxertexteditor, CodeLobster, LopeEdit, dida, ConText, SuperEdit, TextPad,
XML :
eWebEDIT, cooktop, editml, pebb, pxe, selexml, stylus-studio-enterprise, Xed,
XedPro, XMLFox, xmlnotepad, XMLobjective, XMLSpyEclipse, XMLViewer, XMLwrit-
er, Oxygen XML…
16. la rapidité à charger des très gros fichiers et à naviguer dans ces gros fi-
chiers, d’autres permettent une
17. saisie en WYSIWYG (mode graphique, plus lents) alors que d’autres per-
mettent seulement une
Exécution :
1) 1 (=1) = 1*(1+1)*(2*1+1)/6 = 1*(2)*(3)/6 = 1 = 1
2) 1+4 (=5) = 2*(2+1)*(2*2+1)/6 = 2*(3)*(5)/6 = 5 = 5
3) 1+4+9 (=14) = 3*(3+1)*(2*3+1)/6 = 3*(4)*(7)/6 = 14 = 14
4) 1+4+9+16 (=30) = 4*(4+1)*(2*4+1)/6 = 4*(5)*(9)/6 = 30 = 30
5) 1+4+9+16+25 (=55) = 5*(5+1)*(2*5+1)/6 = 5*(6)*(11)/6 = 55 = 55
…
Chaque carré parfait est divisible par 3 ou 4 ou quand on lui soustrait 1. Chaque
carré parfait est divisible par 5 ou l’est quand on lui additionne ou soustrait 1,
puisque le carré d’un nombre se termine nécessairement par l’un des chiffres :
1 , 4 , 5 , 6 , 9 , 0.
<script> 9 :
var i=1, t=0 ; tmp=s="" * 81 DIVISIBLE par 3 =
for(; i<15 ; i++) { 81-1 (80) => non divisible par 3
document.write( 81+1 (82) => non divisible par 3
* 81 non divisible par 4
"<br><br>"+i+" :<br>") 81-1 (80) => DIVISIBLE par 4 = 20
p= Math.pow(i,2) 81+1 (82) => non divisible par 4
* 81 non divisible par 5
c(3) ; c(4) ; c(5) 81-1 (80) => DIVISIBLE par 5 = 16
} 81+1 (82) => non divisible par 5
function c(d){
if(!(p%d)) document.write(
"* "+p+" DIVISIBLE par "+d+" = "+"<br>")
else if(p%d) document.write(
"* "+p+" non divisible par "+d+"<br>")
if((p-1)%d) document.write(
p+"-1 ("+(p-1)+") => non divisible par "+d+"<br>")
else document.write(
p+"-1 ("+(p-1)+") => DIVISIBLE par "+d+" = "+(p-1)/d+"<br>")
if((p+1)%d) document.write(
p+"+1 ("+(p+1)+") => non divisible par "+d+"<br>")
else document.write(
p+"+1 ("+(p+1)+") => DIVISIBLE par "+d+" = "+(p+1)/d+"<br>")
}
</script>
<script>
var i=1, t=0 ; tmp=s="" ; flag=0
for(; i<1000000 ; i++) {
p= Math.pow(i,2)
if(p%2) if((p-1)%8) {
document.write(i + "* " + p + " INDIVISIBLE "+
"par " + 8 + " = " + (p-1)/8 + "<br>")
flag++
}
}
if(!flag) document.write(
Exécution :
Aucune exception trouvée jusqu'à 1000000
On peut écrire des identités avec des carrés lorsque le premier terme du
membre de gauche est 3, 10, 21, 36, ... (voir les 39 premiers membres de
l’identité dans l’Array du code de programme ci-dessous). On a ainsi des identi-
tés de successivement 2, 3, 4, ... termes dans le premier membre (de gauche) et
1, 2, 3, ... termes dans le deuxième membre (de droite), dont les quatre pre-
mières identités :
32 + 42 = 52 = 25
102 + 112 + 122 = 132 + 142 = 365
212 + 222 + 232 + 242 = 252 + 262 + 272 = 2030
362 + 372 + 382 + 392 + 402 = 412 + 422 + 432 + 442 = 7230
<script>
p=new Array (
3,10,21,36,55,78,105,136,171,210,253,300,
351,406,465,528,595,666,741,820,903,990,
1081,1176,1275,1378,1485,1596,1711,1830,
1953,2080,2211,2346,2485,2628,2775,2926,3081)
pl=p.length
for(k=0;k<pl;k++){
g=d=0; t="{ [ "; s=""
qtt=k+2; n=p[k]
for(m=0;m<qtt;m++) {
t+="<b>"+n+"</b>^2 ("
g+=v=Math.pow(n++,2)
t+=v+") "
if(m<qtt-1) t+="+ "
}
t+=" ] <b>(="+g+")</b> } ==<br> { [ ";
g=d=0
for(m=0;m<qtt-1;m++) {
t+="<b>"+n+"</b>^2 ("
g+=v=Math.pow(n++,2)
t+=v+") "
if(m<qtt-2) t+="+ "
}
t+=" ] <b>(="+g+")</b> }"
document.write("*"+t+" <b><=></b> <b>"+g+"</b><br>")
}
</script>
JS diffère du C++ en ce que dans le JS *il n’est pas obligatoire de terminer une
instruction par un « ; » quand l’instruction est en fin de ligne (mais il le faut
quand deux instructions distinctes sont sur une même ligne physique), *la défi-
nition de variables n’exige pas le mot clé var et on ne spécifie pas explicitement
leur type (format d’encodage) : JS est un « loosely typed language with auto-
matic coercion [= conversion implicite] », les variables n’ont pas de type fixe ;
elles prennent le type implicite de la valeur qui y est stockée, facilitant les af-
fectations :
<SCRIPT>
window.onload=ftTables;
function ftTables(){
var tTables1 = document.body.createTextRange();
var tTables2 = tTables1.duplicate();
alert(tTables1.text +"\n==\n"+ tTables2.text)
}
</SCRIPT>
<BODY>
<DIV ID=d>Contenu de DIV. </DIV>
<P ID=p>Contenu de P. </P>
<A Href="" ID=a>Contenu de A. </A>
</BODY>
lundi 11 mars 2019 -8/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
JS a six types de données : number, string, object, et Boolean, les deux autres (à
ne pas confondre avec NaN ou « not a Number ») étant null (non instanciée ou
déclarée – pas identique au null de C++) et undefined (instanciée =déclarée ou
définie= mais n’a jamais reçu une valeur explicite) ;
Floating-point number (réel) peut être positif ou négatif et contenir une vir-
gule (decimal point), ou un "e" ou “E” (notation scientifique donnant la puis-
sance de 10) suivi d’un entier positif ou négatif, soit les deux, selon le stan-
dard IEEE 754 de représentation numérique. Les nombres hexadécimaux et
octaux peuvent être négatifs mais jamais fractionnaires. Des valeurs numé-
riques spéciales :
NaN, ou not a Number (Pas un nombre)
Positive Infinity (infini positif)
Negative Infinity (infini négatif)
Positive 0 (0 positif)
Negative 0 (0 négatif)
function fswap(s){
tmp=s[0],s[0]=s[1],s[1]=tmp
return s
}
function disp(d){
alert("TA = " + d[0] + " / " + d[1])
}
</script>
<script>
var TA = new Object();
TA.MAX=8
TA.min=14
TA.pls=68
alert(TA.MAX+" / "+TA.min)
TA=fswap(TA)
alert(TA.MAX+" / "+TA.min)
Il n’ya pas que la différence entre les C et le JavaScript, il y a aussi des diffé-
rences entre différents interpréteurs JS. Voici par exemple comment différents
Browsers exécutent un même code, ci-dessous :
<script>
document.write((new Date()).toLocaleString())
</script>
Vérifiez donc d’abord votre code avec d’autres browsers (ou interpréteurs JS)
avant de conclure qu’il est la source d’un problème.
La propriété prototype :
Exemple :
<SCRIPT LANGUAGE="JavaScript"> Jour Semaine = 0è
vdate = new Date(
2008, 12, 11, 15, 20, 25) Millénaire : 3è
Siècle = 21è
// Ajout d'une propriété à l'objet Date :
Date.prototype.Millenaire;
vdate.millenaire =
Math.ceil(vdate.getFullYear()/1000)+"è<br>"
document.writeln("Jour Semaine = " +
vdate.getDay() +
"è<br>Millénaire : " +
vdate.millenaire);
Exemple2 : Dans cet exemple figure la commande « alert » qui affiche une boîte
de message. JS offre trois sortes de “Message Boxes” pop-up (surgissant) :
« alert », « prompt » et « confirm » ; ce sont des méthodes de l’objet interface
« window ». Ces boîtes de message sont « modal » càd qu’ils monopolisent le
contrôle du processeur pour la fenêtre qui les a affichées, et on doit les fermer
avant de continuer.
alert prend au maximum un seul argument (la chaîne non HTML à afficher),
affiche un bouton OK pour fermer la boîte.
<script>
document.write( prompt("Dites un mot","") ) quoi ?
</script>
confirm prend un seul argument (la chaîne non HTML représentant la question
à poser) ; elle pose une question quantique / binaire / booléenne (OUI / NON) et
retourne true ou false selon que l’on clique < OK > ou < CANCEL >.
<script>
var rep = window.confirm(
"Voulez-vous rire ? OK = OUI , Cancel = NON");
if(rep) { alert(rep+" - gbrougble, gbrougble, gbrougble,...!"); }
else window.alert(rep + " - Oh, pourquoi NON!");
</script>
->
->
<script>
rep=prompt("Tourner combien de fois ?", 15)
document.write(rep)
</script>
15
<script>
Date.prototype.HrCplt=
function(){
j = new Array(
"Dim","Lun","Mar","Mer","Jeu","Ven","Sam")
m = new Array("Jan","Fév","Mar","Avr","Mai",
"Jun","Jul","Aug","Sep","Oct","Nov","Déc")
d = new Date() ;
r = "Il est exactement :\n"
return r +
j[d.getDay()] + " , " + d.getDate() + "/" +
m[d.getMonth()]+ "/" + d.getFullYear()+ "\n" +
d.getHours() + " hrs : " +
d.getMinutes() + " Min : " +
d.getSeconds() + " Secs"
}
h = new Date()
alert(h.HrCplt())
</script>
Pour définir (créer) une nouvelle propriété ou méthode pour un objet plus faci-
lement : juste l’utiliser et éventuellement lui affecter une valeur
<script> Exécution :
var eleve = new Object()
this.nom = "Luys";
this.methode=fmethode // Sans arguments Luys 45 true
with (eleve) {
cote = 45; // eleve.cote = 45 Luys 45 true
delib = true; // eleve.delib = true *Dans la méthode*
}
with (eleve) document.write( Luys 45 true
nom+" "+cote+" "+delib+"<br>") Luys 45 true
document.write(
this.nom+" "+this.cote+" "+this.delib)
lundi 11 mars 2019 -14/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
this.methode(eleve) Rem.: this représente
function fmethode(p){ l’objet [en cours de créa-
document.write("<br>*Dans la méthode*<br>") tion].
with (p) document.write(
nom+" "+cote+" "+delib+"<br>")
document.write(
this.nom+" "+this.cote+" "+this.delib)
}
</script>
Définir (créer) une nvlle template (structure, modèle) d’un objet est aussi facile:
o1=new eleve("dias",120,true);
o1.meth1(o1) // appel fmethobj()
o2=new eleve()
o2.newProp1="NP1" // newProperty portée fichier
with(o2){
nom="luy"; age=80; loge=false
newProp2="NP2" // newProperty portée bloc
meth2(nom,age,loge,newProp1,newProp2) // appel fmethparms()
document.write("<br>&NP1= "+newProp1)
document.write("<br>NP2= "+newProp2)
lundi 11 mars 2019 -15/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
}
document.write("<br>#NP1= "+o2.newProp1)
document.write("<br>NP2= "+o2.newProp2)
o1.meth1(o1);o1.meth1(o2);o2.meth1(o2);o2.meth1(o1);
</script>
for(k=-1;k<7;k++)
document.write(k+". «"+myArray[k]+"»<br>")
</script>
<script> true
var re = new RegExp();
document.write ( RegExp.prototype.isPrototypeOf( re ) );
</script>
document.write('s.hasOwnProperty("length") = '+
s.hasOwnProperty("length")+"<br>");
document.write('String.prototype.hasOwnProperty("length") = '+
String.prototype.hasOwnProperty("length"));
</script>
Exécution :
<body>
<!-- création de l'objet image dans HTML -->
<img src="http://dummy1">
<img src="http://dummy2">
<img src="http://dummy3">
<script>
// création de l'objet image dans JS
var Objimage;
Objimage = new Image()
// initialisation
Objimage.src = "http://dummy0"
document.write("<img src="+Objimage.src+"><br>")
tmp=""
il=document.images.length
tmp+=il+" images chargées:"+"\n"
for(k in document.images)
tmp+=k+". "+
"src= "+document.images[k].src+
" * bgcolor="+document.images[k].bgcolor+
" * height="+document.images[k].height+
" * width="+document.images[k].width+"\n"
document.write(tmp)
</script>
</body>
Exécution :
<head>
<script type="text/javascript">
function clickedEl(e,nEl){
var targ, b
if (!e) var e=window.event;
if (e.target) targv=e.target;
else if (e.srcElement) targv=e.srcElement;
eb=e.button;
if(eb==0) b="Left";
else if(eb==1) b="Middle"
else if(eb==2) b="Right";
console.log("Bouton =",b," ",e.x," "+e.y)
}
</script>
</head>
<body onmouseup="clickedEl(event,this.isMultiLine)">
<p onmouseup="clickedEl(event,this.isMultiLine)">
Clickez n'importe où, tout bouton</p>
<h3 onmouseup="clickedEl(event,this.isMultiLine)">
Ceci un Header</h3>
<a href="javascript:void(0)"
onmouseup="clickedEl(event,this.isMultiLine)">
Ceci est un lien hypertexte (HYPERLIEN)</a><br>
<HTMLAREA onmouseup="clickedEl(event,this.isMultiLine)">
HTMLAREA</HTMLAREA><br>
<TEXTAREA onmouseup="clickedEl(event,this.isMultiLine)">
TEXTAREA</TEXTAREA><br>
<FIELDSET onmouseup="clickedEl(event,this.isMultiLine)">
FIELDSET</FIELDSET><br>
Exécution :
aLaDate[0]=new Date(2000,8,11,12,23,34)
a_nJsem[0]=aLaDate[0].getDay()
aLaDate[1]=new Date(2004,8,11)
lundi 11 mars 2019 -19/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
a_nJsem[1]=aLaDate[1].getDay()
aLaDate[2]=new Date(2008,8,11,54,65,76)
a_nJsem[2]=aLaDate[2].getDay()
aLaDate[3]=new Date(0,8,11)
a_nJsem[3]=aLaDate[3].getDay()
aLaDate[4]=new Date(100,8,11,18,29,30)
a_nJsem[4]=aLaDate[4].getDay()
aLaDate[5]=new Date(9999,8,11)
a_nJsem[5]=aLaDate[5].getDay()
aLaDate[6]=new Date(2012,8,11,12,38,45)
a_nJsem[6]=aLaDate[6].getDay()
console.log("*".repeat(25));
for(let k in a_nJsem)
console.log("a_nJsem[" + k + "]*=> "+a_nJsem[k] + " // " +
"aLaDate[" + k + "] = "+j[a_nJsem[k]])
console.log("*".repeat(25));
let mins=[];
console.log(oNvDate);
oNvDate[0]=new Date(2000,8,11)
mins[0]=oNvDate[0].getMinutes()
oNvDate[1]=new Date(2004,8,11,45,56,67)
mins[1]=oNvDate[1].getMinutes()
oNvDate[2]=new Date(2008,8,11,78,89,90)
mins[2]=oNvDate[2].getMinutes()
oNvDate[5]=new Date(9999,8,11)
mins[5]=oNvDate[2].getMinutes()
console.log(oNvDate);
console.log("*".repeat(25));
Exécution :
Remarques :
Exemple1 :
<body>
<form id="Form1"></form><form name="Form2"></form><form id="Form3"></form>
<script type="text/javascript">
document.write(document.forms.length + " FORMS rencontrés jusqu'ici")
for(k=0;k<document.forms.length;k++)
document.write("<br>#"+document.forms[k].id);
for(k=0;k<document.forms.length;k++)
lundi 11 mars 2019 -21/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
document.write("<br>*"+document.forms[k].name);
</script>
Exécution:
3 FORMS rencontrés jusqu'ici
#Form1
#
#Form3
*
*Form2
*
Exemple2:
<SCRIPT>
window.onload=ftTables;
function ftTables(){
var tTables1 =
document.body.createTextRange();
alert(tTables1.text)
}
</SCRIPT>
<BODY>
<DIV ID=d>Contenu de DIV.</DIV>
<P ID=p>Contenu de P.</P>
<A Href="" ID=a>Contenu de A.</A>
</BODY>
<script type="text/javascript">
function go(){
var x=document.getElementById('elTable').rows[0].cells;
var y=document.getElementById('elTable').rows[2].cells;
var z=document.getElementById('elTable').rows[1].cells;
x[0].innerHTML="AFFECT R0C0";
y[1].innerHTML="AFFECT R2C1";
z[2].innerHTML="AFFECT R1C2";
}
</script>
<body>
<table id="elTable" border="1">
<tr><td>Rang-0 Col-0</td><td>Rang-0 Col-1</td>
<td>Rang-0 Col-2</td></tr>
<tr><td>Rang-1 Col-0</td><td>Rang-1 Col-1</td>
<td>Rang-1 Col-2</td></tr>
<tr><td>Rang-2 Col-0</td><td>Rang-2 Col-1</td>
lundi 11 mars 2019 -22/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
<td>Rang-2 Col-2</td></tr>
</table>
<input type="button" onclick="go()" value="Demo">
</body>
// Appels de fonction
argc_argv()
argc_argv("un")
argc_argv("un","deux")
</script>
Affectation d’Arrays :
<script>
ar = new Array(3)
ar=[5,"Z",7,"e",2,"B",15,"a",1,"M",5,"w",8]
// Evitez d'utiliser des éls au-delà du dernier indice défini
<script>
a=new Array(3)
a[0]=new Array(2); a[1]=new Array(3); a[2]=new Array(1)
Exécution :
<SCRIPT> true
window.onload=ftTables;
function ftTables(){
var tTables1 = document.body.createTextRange();
var tTables2 = tTables1.duplicate();
var isInside = tTables1.inRange(tTables2);
<BODY>
<DIV ID=d>Contenu de DIV. </DIV>
<P ID=p>Contenu de P. </P>
<A Href="" ID=a>Contenu de A. </A>
</BODY>
<script>
function ForInDemo(){
var base, key, dict = "";
base = {
"p" : "Parton" , "a" : "Armand" ,
"d" : "Dolly"
}
return(dict);
}
alert(ForInDemo())
</script>
karr=["a","b","d","k","p","q"]
return(dict);
}
alert(ForInDemo())
</script>
<script type="text/javascript">
function getFilter(){
document.getElementById('myImage').style.filter="invert()";
}
function noFilter(){
document.getElementById('myImage').style.filter=false;
}
</script>
</head>
<body>
<p>Exemple d'insertion DYNAMIQUE du filtre "invert".</p>
<b>Survolez l'image</b><br />
<img id="myImage" src="joyeux-noel.jpg" width="160" height="120"
onmouseover="noFilter()" onmouseout="getFilter()">
<body>
Dans le C++ tout caractère est représenté par son code ASCII et on peut soit af-
ficher directement ce code ASCII ou le caractère (graphisme) correspondant,
simplement en spécifiant le format d’affichage %d ou %u ou %i ou %c par
exemple.
Dans JavaScript :
<script>
var t1=t2="DIASOLUYE"
tp5=t1.charAt(5)
affichera :
function replChar(s1,pos,ch){
s2=s1.substr(0,pos-1)
s2+=ch
s2+=s1.substring(pos)
return s2
} .
</script>
<script language=JavaScript>
alert(
"date = " + 1000 + 900 + 45+ "\n" +
"date = " + (1000 + 900 + 45))
</script>
Affichera ->
affichera ->
Si les nombres sont des values de champs (les valeurs de champs sont littérales
même s’ils sont numériques), on peut parfois être obligé d’écrire
=fâcheusement=
<script>
J=jour.value;M=mois.value;A=annee.value;
T=J+M+A
alert(J+"+"+M+"+"+A+"="+T)
</script>
15+9+2009=1592009
<script>
J=jour.value;M=mois.value;A=annee.value;
T=eval(J+M+A)
document.write(J+"+"+M+"+"+A+"="+T)
</script>
15+9+2009=1592009
<script>
J=jour.value;M=mois.value;A=annee.value;
T = eval(eval(J)+eval(M)+eval(A))
document.write(J+"+"+M+"+"+A+"="+T)
</script>
15+9+2009=2033
<script>
J=jour.value;M=mois.value;A=annee.value;
T=-(-J-M-A)
document.write(J+"+"+M+"+"+A+"="+T)
</script>
15+9+2009=2033
Observez ce qui suit : Mélangés avec des Strings dans une concaténation, les
nombres ont un comportement qui peut être imprévisible, traités comme tels
ou forcés en Strings selon le contexte :
"*".repeat(10) +
"*".repeat(10) +
<script>
J=jour.value;M=mois.value;A=annee.value;
document.write("Une difficulté sied ici : " + M+A-J + " Vous avez vu ?")
console.log(
"Une difficulté sied ici : " +
eval(-(-M-A)-J) +
" Vous avez vu ?")
console.log(
"Une difficulté sied ici : " +
eval(eval(M)+eval(A)-J) +
" Vous avez vu ?")
</script>
Exercice :
<script>
function foo(){
jsem=["Samedi","Dimanche","Lundi","Mardi","Jeudi","Vendredi","Samedi"]
j=jour.value;m=mois.value;a=annee.value; var wd
FIN BASIC */
alert(jsem[wd])
}
</script>
Bien que donc pratiquement ce qui marche avec C++ marche avec JavaScript, il
faut quand même de la prudence/attention quand on programme en JS : pour
traiter une addition de nombres comme concaténation littérale et pas comme
somme arithmétique en début d’une concaténation littérale de nombres se pré-
sentant comme évaluation arithmétique, créez un terme factice de type chaîne
vide en début de l’expression :
Voici la confusion qui peut arriver 1 quand on ne prend pas garde à la manipu-
lation des semblant de chiffres / nombres, ici dans une opération de comparai-
son. Les « value » des « input » sont littéral même quand ils sont numériques.
1
En passant, voici une autre confusion qui peut arriver, cette fois-ci dans toute programmation. Les conditions
jamais exécutées :
<script>
r=Math.round(Math.random()*1000)
if(r<500) {
document.write(r + " < " + 500 + "<br>")
if(r>=500) document.write("Jamais exécuté : " + r + " >= 500<br>")
if(r<700) document.write("N'ajoute rien à r<500 : " + r + " < 500<br>")
}
</script>
Exécution:
C’est une erreur de logique : les erreurs de programmation sont souvent regrou-
pées en erreur de syntaxe ou erreur du temps de compilation (empêchent
l’exécution), erreur de logique, erreur du temps d’exécution (se soldent souvent
lundi 11 mars 2019 -32/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
i1v=eval(i1n.value) , i2v=eval(i2n.value)
s=i1v + " > " + i2v
t=i1v > i2v
document.write(s + " ? " +t + " - numérique<hr>")
</script>
Exécution :
10 2
Les values des inputs sont littérales et ne sont pas convertibles en numériques :
<style>
input{width:165}
</style>
function go(p){
if(p.style.background!=bcg)
tot=eval(eval(tot)+eval(p.value));
p.style.background=bcg;
p.value =
"typeof p.value ("+p.value+") = "+
typeof p.value
}
</script>
<style>
input{width:25;background:lightgrey}
</style>
Sensibilité au traitement<br><br>
function go(p,q){
let inc;
if((q && p.style.background) || !p.style.background){
if(q){
if(p.style.background.startsWith(bcg)) inc =-p.value;
else inc=0;
}
else if(!p.style.background) {
inc = p.value;
}
tot = 1*tot + 1*inc;
// La solution sied ci-haut!
if(q) p.style.background="";
else p.style.background=bcg;
Exécution :
for(let k=2;k<=22;k++){
tmp+="| Base" +
k.toString().padStart(3," ") +
": " +
n +
"d= " +
n.toString(k).padStart(10," ");
console.log(tmp);
</script>
Exécution:
Exécution :
http%3A%2F%2Fwww.pathurl.ext
http://www.pathurl.ext
<body>
<div id=d></div> <input name=n>
</body>
<script>
document.getElementById("d").innerHTML= "1. getElementById dans div"
document.write("<br>2. Le texte dans div est : « " +
document.getElementById("d").innerText + " »")
n.value="3. Affectation dans input"
i='innerText'
document.write("<br>4. « "+ d[i] +" »")
if(confirm("Go")) d.innerHTML="5. Nouveau texte dans div"
</script>
</body>
Exécution :
Exemple de gestion de style avec JavaScript & fonction dans une fonction :
blink(idn,300) blink(idn,300)
</script> </script>
<SCRIPT>
function f_chge(idEl,p){
el=document.getElementById(idEl).style
if(p==1) el.visibility = "hidden"
if(p==0) el.visibility = "visible"
}
</SCRIPT>
<SCRIPT>
function f_getElementsByName(){
// Retourne une COLLECTION de 3 éléments INPUT.
var aInput=document. getElementsByName ("firstName
");
alert(aInput.length+" * "+aInput[2].checked)
}
</SCRIPT>
Un autre exemple :
function stopClock(){
document.getElementById('txt').value=counter++;
t=setTimeout("stopClock()",1000);
}
<body>
<form>
<input type="button" value="Démarrer" onClick="finit()" id='i'>
<br><input type="text" id="txt"><br>
<input type="button" value="Pause" onClick="stopCount()">
</form>
</body>
window.location.href window.location
location.href Location
document.URL (2)
2
Signalons que la propriété « document.lastModified » donne la date de la dernière sauvegarde.
lundi 11 mars 2019 -41/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
<script>
alert("«"+
document.URL+"»");
</script>
<script>
b=" »" + "<br>"
tmp =" 1. document.URL = « "+ document.URL +b
// tmp =" 2. location.URL = « "+ location.URL +b
// tmp =" 3. window.URL = « "+ window.URL +b
tmp+=" 4. document.href = « "+ document.href +b
tmp+=" 5. location.href = « "+ location.href +b
tmp+=" 6. window.href = « "+ window.href +b
tmp+=" 7. document.location = « "+ document.location +b
tmp+=" 8. location.location = « "+ location.location +b
tmp+=" 9. window.location = « "+ window.location +b
tmp+="10. document.location.href = « "+ document.location.href +b
// tmp+="11. location.location.href=« "+ location.location.href +b
tmp+="12. window.location.href = « "+ window.location.href +b
tmp+="13. document = « "+ document +b
tmp+="14. location = « "+ location +b
tmp+="15. window = « "+ window +b
document.write(tmp);
</script>
Exécution :
1. document.URL = « file://D:\DADET\dummy.htm »
4. document.href = « undefined »
5. location.href = « file:///D:/DADET/dummy.htm »
6. window.href = « undefined »
7. document.location = « file:///D:/DADET/dummy.htm »
8. location.location = « undefined »
9. window.location = « file:///D:/DADET/dummy.htm »
10. document.location.href = « file:///D:/DADET/dummy.htm »
12. window.location.href = « file:///D:/DADET/dummy.htm »
13. document = « [object] »
14. location = « file:///D:/DADET/dummy.htm »
15. window = « [object] »
window.location="diasmirehfbc.html".
Repris aussi bien comme opérande de gauche que de droite, elles permettent de
rafraîchir (recharger) la page : document.URL = location.
lundi 11 mars 2019 -42/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
history.go(0)
location.reload()
<style>
#menu { background:navy;color:lime;text-transform:capitalize }
</style>
<body>
<form name="f1n" id="f1i">
<select id="menu" onchange="ftest()">
<option>--faites un choix--</option>
<option value="http://www.Mercedes.com">Mercedes</option>
<option value="http://www.Ford.com">Ford</option>
<option value="http://www.Ferari.com">BMW</option>
</select>
</body>
<script>
function ftest() {
window.location=document.getElementById("menu").value;
}
</script>
Pour connaître si une page a été ouverte avec référence à un signet (signe nu-
mérique #), utilisez hash.
<script>
function f_Hash() {
nd=window.open("url#signet")
if(nd.document.location.hash!="")
alert(nd.document.location.hash)
}
onload=f_Hash
</script>
Exemple2
<script>
nd=window.open("http://url.dom")
nd.location.hash="signet"
</script>
Exemple3
<SCRIPT>
document.write("<a name='signet1'></a>")
for(k=0;k<300;k++) document.write("signet1 ")
for(k=0;k<300;k++) document.write("signet2 ")
document.write("<a name='signet2'></a>")
location.hash="signet2"
alert("Nb d’Or (1,6180339887498948482045868343656)= " + (1+Math.sqrt(5))/2)
location.hash="signet1"
</SCRIPT>
Exemple4
<script>
function f_Hash(s) {
var nd=window.open("hash.html");
nd.location.hash = s;
}
</script>
On peut définir l’effet de transition de page ou de site (la façon dont une page
ou un site doit s’ouvrir et/ou se fermer), selon la syntaxe suivante.
<script>
function Set_Cookie(
name, value, expires, path, domain, secure
) {
Mots-clés :
javas-
cript,map,ecmascript,regexp,arrays,string,getElementById,getElem
entsBy-
Name,attributs,lastChild,createElement,insertAdjacentElement,first
Child,fontVariant,selectedIndex,options,object,typeof,try-
catch,anchor,Array, Boolean, Date, Function, Global, Math, Num-
ber, Object, RegExp, Regular Expression,string literal
diasfb@mail2world.com
Autre Lecture :
https://www.scribd.com/document/374738470/Le-Plus-Grand-Secret-de-
La-Creation
• 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
lundi 11 mars 2019 -48/49- 07:36:03
JAVASCRIPT && ALGORITHMIQUE
• 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-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