La première méthode est appropriée lorsque vous avez besoin d'un objet valide dans obj
pour le reste de votre code et que vous voulez vous assurer qu'il existe un objet valide dans un seul endroit dans le code.
La deuxième méthode est appropriée lorsque vous voulez simplement vérifier si obj
a été transmise ou non et faire quelque chose de différent dans votre code en fonction de cette condition. Une vérification plus robuste serait:
if (typeof obj === "object")
Donc, ce sont des techniques différentes qui accomplissent des objectifs différents et qui sont principalement utilisées dans des circonstances différentes. Donc, la réponse est que «cela dépend de ce que fait le reste de votre code et de ce que vous essayez vraiment d'accomplir dans votre code». Il n'y a pas une seule réponse qui soit toujours correcte.
Un modèle de conception commun pour votre première technique est utilisée lorsque vous avez un objet en option avec des propriétés en option et que vous voulez remplir les valeurs par défaut des propriétés manquantes ou même si l'objet entier n'a pas été adopté:
function doSomething(obj) {
var defaults = {timeout: 2000, caseSensitive: false, waitTime: 400};
var options = Object.assign({}, defaults, obj);
// safely use options object in the rest of this function
}
Cette technique fonctionne également en toute sécurité sur une copie de l'objet transmis afin que l'objet appelant ne soit jamais modifié.
Ni l'un ni l'autre? Que faire si 'obj === 1'? – theonlygusti
Dépend de ce que vous voulez 'obj' à maintenir après l'instruction. – Bergi
Ne pas [optimiser prématurément] (https://en.wikipedia.org/wiki/Premature_optimisation). Toute différence, le cas échéant, sera négligeable. Utilisez des idiomes standards et concentrez-vous sur la lisibilité. – Bergi