La meilleure façon de déterminer si un argument n'est pas transmis à la fonction JavaScript

J'ai maintenant vu 2 méthodes pour déterminer si un argument a été transmis à la fonction JavaScript. Je me demandais si une méthode est meilleure que l'autre ou si l'une est tout simplement mauvais à utiliser?

 function Test(argument1, argument2) {
      if (Test.arguments.length == 1) argument2 = 'blah';

      alert(argument2);
 }

 Test('test');

Ou

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');

Aussi loin que je peux dire, elles résultent de la même chose, mais je ne l'ai utilisé la première avant dans la production.

Une autre Option, comme mentionné par Tom:

function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}

Comme par Juan commentaire, il serait préférable de changer de Tom suggestion:

function Test(argument1, argument2) {
    if(argument2 === undefined) {
        argument2 = 'blah';
    }

    alert(argument2);
}
  • C'est vraiment la même. Si vous avez toujours un nombre statique d'arguments puis aller avec la deuxième méthode, sinon il est probablement plus facile pour l'itération en utilisant le tableau d'arguments.
  • Un argument qui n'a pas été adopté en tant que indéfini. Test avec une stricte égalité contre null échouera. Vous devez utiliser une stricte égalité avec indéfini.
  • Rappelez-vous: argument2 || 'blah'; entraînera 'blah' si argument2 est false(!), pas simplement, si elle n'est pas définie. Si argument2 est un booléen, et la fonction est passée false pour elle, cette ligne sera de retour 'blah' en dépit de argument2 être correctement défini.
  • Même problème si argument2 est 0, '', ou null.
  • Très vrai. Javascript interprétation unique d'objets et le casting est à la fois la meilleure et la pire des parties.
InformationsquelleAutor Darryl Hein | 2009-01-04