« Programmation JavaScript/Variables » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 44 :
Si aucune condition n'est remplie et que l'expression affecte une valeur à la variable, cette variable est créée comme propriété de l'objet global. Si l'expression ne fait qu'utiliser la valeur, elle retournera simplement '''undefined'''.
 
<sourcesyntaxhighlight lang="javascript">c=true
d="propriété de window"
 
Ligne 66 :
alert(window.d) // affiche "propriété de window"
}
</syntaxhighlight>
</source>
 
=== Variables locales ===
Ligne 73 :
Comme toute variable locale, elle est automatiquement détruite à la fin de la fonction, bien que sa valeur puisse être sauvegardée dans certains cas (voir [[../Closure]]). Par contre, elle ne peut pas être détruite par l'opérateur [[../Opérateurs#Dé-référencement (delete)|delete]].
 
<sourcesyntaxhighlight lang="javascript">
function foo()
{
Ligne 85 :
}
alert(loc_2); // Provoque une erreur
</syntaxhighlight>
</source>
 
Si la déclaration '''var''' est utilisée en-dehors de toute fonction, la variable sera utilisable dans tout le script.
Ligne 95 :
Une variable est du type undefined dans trois cas:
* Après déclaration '''var''' sans affectation
<sourcesyntaxhighlight lang="javascript">
var maNouvelleVar; // Déclarée mais pas affectée
alert(typeof maNouvelleVar); // Affiche undefined
</syntaxhighlight>
</source>
* Si on lui affecte explicitement la valeur <code>undefined</code>, ou qu'on lui affecte le résultat d'une expression qui retourne cette valeur.
<sourcesyntaxhighlight lang="javascript">
var jeSaisPas = undefined
var caNExistePas = "impossible".enFrancais
alert (typeof jeSaisPas) // Affiche undefined
alert (typeof caNExistePas) // Affiche undefined
</syntaxhighlight>
</source>
* Si elle n'a pas été déclarée ni utilisée, ou bien qu'elle a été effacée par l'opérateur [[../Opérateurs#Dé-référencement (delete)|delete]].
<sourcesyntaxhighlight lang="javascript">
alert(typeof varPasDeclaree); // Affiche undefined (si elle n'a effectivement pas été affectée)
monEphemere = "exister";
Ligne 114 :
 
alert(varPasDeclaree) // erreur !!
</syntaxhighlight>
</source>
 
À noter : dans les deux premiers cas, la variable existe et possède une valeur (<code>undefined</code>). On peut lire cette valeur sans provoquer d'erreur. Dans le troisième cas cependant, la variable n'existe pas : l'opérateur <code>typeof</code> retourne "undefined", mais lire directement la valeur de la variable provoque une erreur.
Ligne 120 :
=== number ===
JavaScript réunit en un seul type les entiers, petits et grands, les décimaux, et les réels, flottants ou pas.
<sourcesyntaxhighlight lang="javascript">
r = 1/3;
alert(r); // affiche 0.333333333333
Ligne 132 :
0x40 // 64 en notation hexadécimale
0100 // 64 en notation octale
</syntaxhighlight>
</source>
 
Concrètement, les nombres sont stockés sur 64 bits, avec une mantisse de 53 bits. Cela permet des valeurs entières jusqu'à 9 007 199 254 740 991, à partir duquel on commence à perdre de la précision jusqu'à 2^1024-1 qui est la valeur flottante la plus élevée représentable en JavaScript.
Ligne 138 :
En fait, JavaScript inclut également dans le type '''number''' deux valeurs spéciales. '''Infinity''', un nombre signé, est renvoyé dès que le résultat dépasse la capacité de stockage de '''number''', mais aussi dans des cas limites simples. Dans les cas indécidables, ou bien lorsqu'une opération qui retourne un nombre ne peut pas le faire, c'est la valeur '''NaN''' (Not A Number) qui est renvoyée (voir les [[../Opérateurs#Opérateurs arithmétiques|opérateurs arithmétiques]], [[../Number|les méthodes de Number]] et [[../Math|les méthodes de Math]] pour les cas qui produisent ces deux valeurs).
 
<sourcesyntaxhighlight lang="javascript">
1/0 == Infinity
-2 / Infinity == 0
0/0 == NaN
Number("texte") == NaN
</syntaxhighlight>
</source>
 
=== string ===
Ligne 169 :
=== boolean ===
Une variable de type boolean accepte deux valeurs : vrai et faux.
<sourcesyntaxhighlight lang="javascript">
b = true;
alert(typeof b); // Affiche "boolean"
c = (5 == 3); // est faux, mais l'expression est booléenne.
alert(typeof c); // Affiche "boolean"
</syntaxhighlight>
</source>
 
Dans une comparaison, les valeurs suivantes sont équivalentes ([[../Opérateurs#Égalité (==, ===)|opérateur '''==''']]) à '''false''' :
Ligne 213 :
 
L'instanciation explicite d'un objet grâce à un constructeur s'effectue avec [[../Opérateurs#Instanciation (new)|l'opérateur '''new''']].
<sourcesyntaxhighlight lang="javascript">
t = new Array();
alert(typeof t) // Affiche "object"
</syntaxhighlight>
</source>
 
Les expressions littérales de chaînes, nombres et booléens créent des variables scalaires alors que le constructeur de ces types crée un objet (explicitement de type '''object''' et donc strictement différents d'une valeur scalaire équivalente). Mais les expressions littérales de fonctions, tableaux et expressions rationnelles créent des objets, car ce ne sont pas des types scalaires. Ces objets, instanciés sans utilisation de '''new''', sont néanmoins strictement identiques à leur équivalent produit par l'appel d'un constructeur. Par exemple :
 
<sourcesyntaxhighlight lang="javascript">
// valeur scalaire vs. objet
"chaîne" !== new String("chaîne")
Ligne 228 :
["a", "b", "c"] === new Array("a", "b", "c")
/(\w+) ?\(/i === new RegExp("(\w+) ?\(", "i")
</syntaxhighlight>
</source>
 
On peut créer un objet générique (qui sera simplement une instance de la "classe" [[../Object|'''Object''']]) avec la notation littérale. Cela consiste à écrire, entre accolades, une liste de couples clé : valeur séparés par des virgules, la clé pouvant être un identifiant ou bien une chaîne, et la valeur pouvant être n'importe quelle valeur. La clé et la valeur sont séparés par deux points (':').
 
<sourcesyntaxhighlight lang="javascript">
objetLitteral = {
nom : "Mac OS X",
Ligne 238 :
"nom de code" : "Leopard"
}
</syntaxhighlight>
</source>
Attention, dans l'exemple ci-dessus, on ne pourra accéder à la dernière propriété ("nom de code") de l'objet qu'avec la notation tableau (avec des crochets), pas la notation objet (avec des points) car ce n'est pas un identifiant valide (il y a des espaces dedans).
 
Ligne 256 :
 
Une fonction est créée par l'expression littérale (exemple ci-dessous) ou bien par le constructeur Function.
<sourcesyntaxhighlight lang="javascript">
function fibonacci( n )
{
Ligne 270 :
return v
}
</syntaxhighlight>
</source>
 
Cette déclaration crée une variable "fibonacci" qui référence la fonction, mais c'est aussi une opération qui retourne la référence de la fonction, que l'on peut ainsi affecter à une autre variable. Il est d'ailleurs possible de déclarer une fonction anonyme. De plus, toute nouvelle fonction reçoit automatiquement une propriété '''prototype''' identique au prototype de la fonction Object.
Ligne 276 :
L'appel se fait en ouvrant et fermant une paire de parenthèses juste après une expression dont la valeur est de type "function". Cette expression n'est pas obligatoirement le nom d'une fonction, ni même un identifiant. Cette signification des parenthèses est prioritaire sur la signification générale (forcer une expression à être évaluée avant celles qui l'entourent).
 
<sourcesyntaxhighlight lang="javascript">
f = fibonacci
delete fibonacci // efface seulement la variable, pas la fonction, qui est toujours référencée par f
x = f(10); // Constitue l'appel de la fonction fibonacci, en lui passant un argument
alert(f) // affiche le code de la fonction, y compris le nom donné dans sa déclaration, "fibonacci"
</syntaxhighlight>
</source>
 
Les opérateurs et méthodes qui acceptent des objets comme opérande ou argument fonctionnent pareil avec des fonctions, notamment le point pour accéder aux propriétés de la fonction.