JavaScript Erreurs courantes

Dans ce chapitre, nous aborderons les erreurs courantes en JavaScript.


Mauvaise utilisation de l'opérateur d'affectation

Dans un programme JavaScript, si vous utilisez le signe égal (=) de l'opérateur d'affectation dans une instruction conditionnelle if, cela produira un résultat incorrect. La bonne méthode consiste à utiliser le double signe égal (==) de l'opérateur de comparaison.

ifL'instruction conditionnelle renvoiefalse(comme prévu) car x n'est pas égal à 10 :

var x = 0;
if (x == 10)

Essayez-le vous-même »

ifL'instruction conditionnelle renvoietrue(contrairement à ce que nous attendions) car l'instruction conditionnelle assigne x = 10, et 10 est vrai :

var x = 0;
if (x = 10)

Essayez-le vous-même »

ifL'instruction conditionnellefalse(contrairement à ce que nous attendions) car l'instruction conditionnelle assigne x = 0, et 0 est faux :

var x = 0;
if (x = 0)

Essayez-le vous-même »
Note Une instruction d'affectation renvoie la valeur de la variable.

Erreurs courantes avec les opérateurs de comparaison

Dans une comparaison normale, le type de données est ignoré. L'instruction conditionnelle if suivante renvoie true :

var x = 10;
var y = "10";
if (x == y)

Essayez-le vous-même »

Dans une comparaison stricte, === est l'opérateur d'identité, qui vérifie à la fois la valeur et le type des expressions. L'instruction conditionnelle if suivante renvoie false :

var x = 10;
var y = "10";
if (x === y)

Essayez-le vous-même »

Ce type d'erreur se produit souvent dans switch, car les instructions switch utilisent l'opérateur d'identité (===) pour la comparaison :

L'exemple suivant déclenchera une popup d'alerte :

var x = 10;
switch(x) {
    case 10: alert("Hello");
}

Essayez-le vous-même »

L'exemple suivant ne déclenchera pas de popup d'alerte car les types ne correspondent pas :

var x = 10;
switch(x) {
    case "10": alert("Hello");
}

Essayez-le vous-même »

Précautions pour l'addition et la concaténation

L'additionconsiste à additionner deuxnombresensemble.

La concaténationconsiste à joindre deuxchaînes de caractèresensemble.

JavaScript utilise l'opérateur + à la fois pour l'addition et la concaténation.

Ensuite, nous pouvons utiliser des exemples pour voir la différence entre l'addition de deux nombres et la concaténation d'un nombre avec une chaîne :

var x = 10 + 5;          // Le résultat de x est 15
var x = 10 + "5";        // Le résultat de x est "105"

Essayez-le vous-même »

L'utilisation de variables pour l'addition produit également des résultats incohérents :

var x = 10;
var y = 5;
var z = x + y;           // Le résultat de z est 15

var x = 10;
var y = "5";
var z = x + y;           // Le résultat de z est "105"

Essayez-le vous-même »

Précautions pour les données à virgule flottante

Toutes les données en JavaScript sont stockées sous forme dedonnées à virgule flottante (float) de 64 bitspour le stockage.

Tous les langages de programmation, y compris JavaScript, ont du mal à déterminer la précision des données à virgule flottante :

var x = 0.1;
var y = 0.2;
var z = x + y            // Le résultat de z est 0.30000000000000004
if (z == 0.3)            // renvoie false

Essayez-le vous-même »

Pour résoudre le problème ci-dessus, vous pouvez utiliser la multiplication et la division d'entiers :

Exemple

var z = (x * 10 + y * 10) / 10;       // Le résultat de z est 0.3

Essayez-le vous-même »

Pour plus de détails, vous pouvez consulter :Problèmes de précision en JavaScript et solutions


Sauts de ligne dans les chaînes de caractères JavaScript

JavaScript nous permet d'utiliser des sauts de ligne dans les chaînes de caractères :

Exemple 1

var x =
"Hello World!";

Essayez-le vous-même »

Cependant, utiliser directement un saut de ligne avec retour chariot dans une chaîne provoquera une erreur :

Exemple 2

var x = "Hello
World!"
;

Essayez-le vous-même »

Vous pouvez ouvrir les outils de développement ou appuyer sur F12 pour afficher le message d'erreur :

Pour passer à la ligne dans une chaîne, vous devez utiliser une barre oblique inverse (\), comme montré ci-dessous :

Exemple 3

var x = "Hello \
World!"
;

Essayez-le vous-même »

Utilisation incorrecte des points-virgules

Dans l'exemple suivant, l'instruction if perd son corps. Le corps original de l'instruction if est exécuté comme un bloc de code indépendant, ce qui conduit à une sortie incorrecte.

En raison de l'utilisation incorrecte du point-virgule, le bloc de code dans l'instruction if s'exécutera toujours :

if (x == 19);
{
    // code block 
}

Essayez-le vous-même »

Remarques sur l'instruction return

Par défaut, JavaScript se termine automatiquement à la fin d'une ligne.

Les deux exemples suivants retournent le même résultat (l'un a un point-virgule, l'autre non) :

Exemple 1

function myFunction(a) {
    var power = 10 
    return a * power
}

Essayez-le vous-même »

Exemple 2

function myFunction(a) {
    var power = 10;
    return a * power;
}

Essayez-le vous-même »

JavaScript peut également utiliser plusieurs lignes pour représenter une instruction, ce qui signifie qu'une instruction peut être répartie sur plusieurs lignes.

Les exemples suivants retournent le même résultat :

Exemple 3

function myFunction(a) {
    var
    power = 10; 
    return a * power;
}

Essayez-le vous-même »

Cependant, l'exemple suivant retourneraundefined:

Exemple 4

function myFunction(a) {
    var
    power = 10; 
    return
    a * power;
}

Essayez-le vous-même »

Pourquoi cela se produit-il ? Parce qu'en JavaScript, le code de l'exemple 4 est équivalent au code suivant :

function myFunction(a) {
    var
    power = 10;  
    return;       // 分号结束,返回 undefined
    a * power;
}

Explication

S'il s'agit d'une instruction incomplète, comme ci-dessous :

var

JavaScript essaiera de lire l'instruction sur la deuxième ligne :

power = 10;

Mais parce qu'une telle instruction est complète :

return

JavaScript fermera automatiquement l'instruction :

return;

En JavaScript, les points-virgules sont facultatifs.

Parce que return est une instruction complète, JavaScript terminera l'instruction return.

Note Remarque :Ne coupez pas l'instruction return sur plusieurs lignes.

Utilisation de noms pour indexer des tableaux

De nombreux langages de programmation permettent d'utiliser des noms comme indices de tableaux.

Les tableaux qui utilisent des noms comme indices sont appelés tableaux associatifs (ou tables de hachage).

JavaScript ne prend pas en charge l'utilisation de noms pour indexer des tableaux ; il n'autorise que les indices numériques.

Exemple

var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;         // person.length renvoie 3
var y = person[0];             // person

Essayez-le vous-même »

En JavaScript,les objetsutilisentdes noms comme index.。

Si vous utilisez des noms comme index, JavaScript redéfinira le tableau comme un objet standard lors de l'accès au tableau.

Après cette opération, les méthodes et propriétés du tableau ne seront plus utilisables, sinon des erreurs se produiront :

Exemple

var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length;         // person.length renvoie 0
var y = person[0];             // person

Essayez-le vous-même »

Lors de la définition d'éléments de tableau, n'ajoutez pas de virgule finale

Ajouter une virgule après la dernière valeur d'un tableau est syntaxiquement correct, mais différents navigateurs peuvent produire des résultats différents.

var colors = [5, 6, 7,]; //这样数组的长度可能为3 也可能为4.

Manière correcte de définir :

points = [40, 100, 1, 5, 25, 10];

Lors de la définition d'un objet, n'ajoutez pas de virgule finale

Manière incorrecte de définir :

websites = {site:"Example", url:"www.example.com", like:460,}

Manière correcte de définir :

websites = {site:"Example", url:"www.example.com", like:460}

Undefined n'est pas Null

En JavaScript,nullest utilisé pour les objets,undefinedest utilisé pour les variables, les propriétés et les méthodes.

Un objet ne peut être null que s'il a été défini ; sinon, il est undefined.

Si nous voulons tester si un objet existe, cela lèvera une erreur si l'objet n'a pas encore été défini.

Utilisation incorrecte :

if (myObj !== null && typeof myObj !== "undefined") 

La manière correcte consiste d'abord à utiliser typeof pour vérifier si l'objet est défini :

if (typeof myObj !== "undefined" && myObj !== null) 

Portée de bloc

Dans chaque bloc de code, JavaScript ne crée pas de nouvelle portée ; généralement, la portée de chaque bloc de code est globale.

La variable i dans le code suivant renvoie 10, et non undefined :

Exemple

for (var i = 0; i < 10; i++) {
    // du code
}
return i;

Essayez-le vous-même »
Autres extensions