Maison  >  Article  >  interface Web  >  Pourquoi les opérateurs logiques JavaScript renvoient-ils parfois des objets au lieu de booléens ?

Pourquoi les opérateurs logiques JavaScript renvoient-ils parfois des objets au lieu de booléens ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-18 02:42:02976parcourir

Why Do JavaScript Logical Operators Sometimes Return Objects Instead of Booleans?

Opérateurs logiques en JavaScript : comprendre les résultats non booléens

Contrairement aux opérateurs mathématiques, qui renvoient toujours des valeurs numériques, les opérateurs logiques (&& et | |) en JavaScript peut parfois renvoyer des objets au lieu de booléens. Cela peut être contre-intuitif, surtout lorsque vous essayez de les utiliser pour des vérifications conditionnelles.

Pourquoi les objets sont renvoyés

Le || Les opérateurs et && sont des opérateurs logiques de court-circuit, ce qui signifie qu'ils évaluent leurs opérandes de gauche à droite et renvoient la première valeur logique entièrement déterminée. En JavaScript, cette valeur peut être vraie ou fausse, mais elle peut aussi être un objet.

Comprendre la logique conditionnelle

Dans l'expression X || Y, X est évalué en premier et interprété comme une valeur booléenne. Si X est vrai, il est renvoyé immédiatement et Y n'est pas évalué. En effet, l'expression a déjà été déterminée comme étant vraie.

Si X est faux, Y est alors évalué et sa valeur booléenne est renvoyée.

De même, && arrête d'évaluer si le premier argument est faux.

L'astuce avec "Faux"

Le premier point de confusion se produit parce que lorsqu’une expression est évaluée comme « vraie », l’expression elle-même est renvoyée. C'est pourquoi vous pouvez voir des valeurs réelles renvoyées par des expressions logiques.

L'astuce avec Null

Le deuxième point de confusion provient du comportement de JavaScript dans différentes versions. Initialement, il renverrait false pour les expressions « fausses », mais à partir de la version 1.2, il renvoie la valeur réelle de l'expression.

Exemples

Pour illustrer :

var _ = (obj.fn && obj.fn()) || obj._ || (obj._ = {}); // Returns obj.fn() if defined, otherwise obj._
var _ = obj && obj._; // Returns obj._ if obj is true, otherwise obj

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn