En JavaScript, quand une variable non définie sera-t-elle évaluée comme fausse dans une comparaison booléenne, et quand générera-t-elle une erreur?

Aucun de vos exemples ne devrait générer d’erreur, car ils évaluent tous les deux correctement l’état d’une variable avant de forcer et / ou de renvoyer la valeur en tant que booléen.

Je ne sais pas pourquoi l’autre réponse postée dit que votre première fonction retournera toujours “true” – elle renverra toujours l’évaluation de l’expression.

(Remarque: les parens de l’opérateur de regroupement n’étaient pas nécessaires)

// Evaluate with negation coercion var func1 = function( b ) { return !b; } var foo; func1( foo ); // > true func1( "" ); // > true func1( false ); // > true func1( 1 ); // > false // Explicitly check if b is undefined var func2 = function( b ) { return typeof b === "undefined"; } var foo; func2( foo ); // > true 

Tenter d’accéder à la valeur d’un var non défini est ce qui déclenchera des exceptions…

 console.log( "Hello " + place ); // > ReferenceError: place is not defined 

Mais si vous le vérifiez d’abord, aucune erreur ne sera levée:

 console.log( "Hello " + ( typeof place !== "undefined" && place || "World" ) ); // > "Hello World" 

Dans l’exemple, func1 () va toujours retourner true.

L’erreur à laquelle vous pensez est lorsque vous essayez d’évaluer une expression contenant une variable qui n’a pas été déclarée. Mais les variables de paramètre sont toujours déclarées, même si elles sont égales à indéfinies en raison d’un argument manquant.

! test.blah générera une erreur de référence si test n’est pas défini. Sinon, ils sont équivalents en tant que test booléen.