110 votes

Fonctions Javascript et paramètres par défaut, ne fonctionnent pas dans IE et Chrome

J'ai créé une fonction comme celle-ci :

function saveItem(andClose = false) {

}

Il fonctionne bien dans Firefox

Dans IE, la console affiche cette erreur : Expected ')'

Dans Chrome, la console affiche cette erreur : Uncaught SyntaxError: Unexpected token =

Les deux navigateurs marquent la source de l'erreur comme étant la ligne de création de la fonction.

166voto

juco Points 2858

Vous ne pouvez pas faire ça, mais vous pouvez plutôt faire quelque chose comme :

function saveItem(andClose) {
   if(andClose === undefined) {
      andClose = false;
   }
}

Cela est souvent raccourci en quelque chose comme :

function setName(name) {
  name = name || 'Bob';
}

Mise à jour

Ce qui précède est vrai pour ECMAScript <= 5. L'ES6 a proposé Paramètres par défaut . Donc, ce qui précède pourrait plutôt se lire :

function setName(name = 'Bob') {}

14voto

the system Points 5563

Ce n'est pas une syntaxe ECMAScript valide, mais c'est une syntaxe valide pour le surensemble de fonctionnalités que Mozilla ajoute à son implémentation du langage.

La syntaxe d'affectation des paramètres par défaut est probablement à venir dans ECMAScript 6.

9voto

J.Romero Points 2543

Javascript n'autorise pas de spécificateur "par défaut".

Un moyen rapide de faire ce que vous voulez est de changer :

function saveItem(andClose = false) {

}

à ce qui suit :

function saveItem(andClose) {
    // this line will check if the argument is undefined, null, or false
    // if so set it to false, otherwise set it to it's original value
    var andClose = andClose || false;

    // now you can safely use andClose
    if (andClose) {
        // do something
    }
}

2voto

mheiber Points 290

Le code que vous avez fourni ne fonctionnera pas dans Chrome < version 49 : https://kangax.github.io/compat-table/es6/#test-default_function_parameters

Vous avez utilisé une syntaxe ECMAScript 2015 valide :

À mon avis, la meilleure façon d'utiliser les fonctionnalités de l'ES2015 est de regrouper les actifs avec les éléments suivants Browserify ou WebPack avec une étape d'utilisation Babel pour trans-compiler ES2015 vers ES5. Ainsi, vous n'aurez pas à vous soucier du tableau de compatibilité des navigateurs ES2015. C'est difficile à mettre en place la première fois, mais ça en vaut la peine.

1voto

Dans votre cas, vous avez une autre alternative pour être sûr que votre variable est un booléen :

function saveItem(andClose) {
  andClose = true == andClose;
  // ...
}

La valeur par défaut est undefined et true == undefined => false Votre valeur par défaut sera donc false :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X