124 votes

Est-il mieux de retourner `undefined` ou `null` partir d'une fonction javascript?

J'ai une fonction que j'ai écrite qui, fondamentalement, ressemble à ceci:

function getNextCard(searchTerms) {
  // Setup Some Variables

  // Do a bunch of logic to pick the next card based on termed passed through what I'll call here as 'searchTerms' all of this logic is omitted because it's not important for my question.
  // ...

  // If we find a next card to give, than give it
  if (nextCardFound)
    return nextCardFound;

  // Otherwise - I'm returning undefined
  return undefined;
}

Question: Serait-il mieux de retourner la valeur "null" ici?

Je peux passer ce que je veux arrière - évidemment... je n'étais pas sûr de ce qui est la meilleure chose à utiliser.

Le code qui appelle cette fonction sait comment traiter avec indéfini (en fait, il ne sera jamais vraiment arriver à moins que quelque chose va terriblement mal)

La raison qui me pousse à poser cette question, c'est que j'ai entendu quelque part quelque chose qui sonnait comme "Ne pas affecter undefined pour les variables" ou quelque chose - qu'il sera plus difficile à déboguer. Donc, le fait que je peux voir qu' null est passée dos me dit que le retour est de travailler, mais, fondamentalement, la fonction semblable à l' undefined.


Documentation:

Mozilla Docs N'ai pas la réponse à ma question... google n'a pas :\

Cette SORTE de Question - était trop large pour ce que je suis en train de figure ici.

139voto

chiliNUT Points 3249

Undefined généralement se réfère à quelque chose qui n'a pas encore attribué de valeur (encore). Null renvoie à quelque chose qui définitivement n'a pas de valeur. Dans ce cas, je vous recommandons de retourner une valeur null. Notez qu'une fonction n'est pas spécifié de la valeur de retour implicitement renvoie undefined.

À partir de la ECMAScript2015 spec

4.3.10 valeur non définie

valeur primitive utilisée lorsqu'une variable n'a pas été affecté une valeur

4.3.12 valeur null

primitive de la valeur que représente l' intentionnel de l'absence de tout objet de valeur

http://www.ecma-international.org/ecma-262/6.0/#sec-terms-and-definitions-undefined-type

Pour en savoir plus:

Quand est null ou undefined utilisé en JavaScript?

57voto

ngryman Points 611

Je vais vous donner mes opinions personnelles de choisir entre les deux.

Ma simple question est: la valeur, une autre entrée/de l'état/le contexte peut être défini à quelque chose?

Si la réponse est oui, alors utiliser null d'utiliser undefined. Plus généralement, toute fonction retournant un objet doit renvoyer null lorsque l'objet n'existe pas. Parce qu'il pourrait exister un autre d'entrée/de l'état/contexte.

null représente l' absence de valeur d'une donnée d'entrée/de l'état/contexte. Elle signifie implicitement que le concept de la valeur elle-même existe pas dans le contexte de votre application, mais peuvent être absents. Dans votre exemple, le concept d'une carte suivante existe, mais la carte elle-même peut ne pas exister. null doit être utilisé.

undefined implicitement représente l' absence de sens de la valeur de votre application. Par exemple, si je manipule un user objet par un ensemble de propriétés et j'essaie d'accéder à la propriété pikatchu. La valeur de cette propriété doit être définie à l' undefined parce que dans mon contexte, il ne fait aucun sens d'avoir de tels biens.

45voto

Oriol Points 20803

Je soutiendrai il n'y a pas de meilleure façon, et même des fonctions standards, parfois choisir l'un ou l'autre.

Par exemple:

  • [[Prototype]]

    Les objets ordinaires ont un [[Prototype]] fente interne, qui détermine à partir de laquelle d'autres objets qu'ils héritent de. Bien sûr, il doit y avoir une façon de dire qu'un objet n'hérite pas de n'importe quel autre. Dans ce cas, "il n'est aucun objet" est représenté à l'aide de null.

  • Object.getOwnPropertyDescriptor

    Son retour est prévu un descripteur de propriété, c'est un objet qui décrit une propriété (par exemple, writability, enumerability et des possibilités de configuration). Toutefois, la propriété ne peut pas exister. Dans ce cas, "il n'existe pas de propriété" est représenté à l'aide de undefined.

  • document.getElementById

    Il est prévu de retourner l'élément avec l'ID donné. Cependant, il y a peut-être pas d'élément avec l'ID. Dans ce cas, "il n'y a aucun élément" est représenté à l'aide de null.

Il suffit donc de choisir celui que vous préférez ou de penser a plus de sens pour votre cas spécifique.

4voto

choz Points 1665

undefined n'est pas quelque chose que vous devez confier à. Vous pourriez envisager de retourner quelque chose d'autre que undefined. Dans votre cas, même si vous ne retourne rien du tout, le résultat sera undefined déjà. Donc, je vous suggère d'aller avec null à la place.

Considérons cet exemple,

function getSomething() {
     // .. do something
     return undefined;
}

function doSomething() {
     // .. I'm not gonna return anything.
}

var a = getSomething();
var b = doSomething();

Ci-dessus exemple de résultat en a === b, ce qui est undefined. La différence est que vous économisez 1 l'exécution de l'instruction.

4voto

Dan Points 318

Dépend de ce que u besoin de le faire avec la valeur retournée.

typeof null renvoie un objet. cet objet a une valeur undefined

typeof renvoie undefined undefined

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