-
=
-
Teste si deux expressions sont égales.
-
<
-
Teste si la première expression est inférieure à la seconde. Dans un attribut, cet opérateur doit être codé & lt;.
-
< =
-
Teste si la première expression est inférieure ou égale à la seconde. Dans un attribut, cet opérateur doit être codé & lt;=.
-
>
-
Teste si la première expression est supérieure à la seconde. Dans un attribut, cet opérateur doit être codé & gt;.
-
> =
-
Teste si la première expression est supérieure ou égale à la seconde. Dans un attribut, cet opérateur doit être codé & gt;.
-
!=
-
Teste si les deux expressions ne sont pas égales.
-
and
-
Teste si les deux expressions sont true. Si la première expression est false, la seconde n'est pas évaluée.
-
or
-
Teste si l'une des deux expressions est true. Si la première expression est true, la seconde n'est pas évaluée.
Comparaison de valeurs de différents types de données
Pour les six premiers opérateurs booléens, la comparaison de valeurs de différents types de données est complexe. Les différentes possibilités sont expliquées ci-dessous :
-
Si les deux objets sont des valeurs booléennes
-
Elles sont donc égales si elles ont la même valeur. Pour les comparaisons inférieur à et supérieur à, la valeur false est considérée comme inférieure à la valeur true (l'appel de la fonction number(false()) renvoie la valeur 0, alors que la fonction number(true()) renvoie la valeur 1).
-
Si les deux objets sont des nombres
-
Le fonctionnement des opérateurs correspond exactement à celui attendu.
-
Si les deux objets sont des chaînes
-
Elles sont donc égales si leurs caractères Unicode sont identiques. Pour les comparaisons inférieur à et supérieur à, les codes des caractères sont comparés.
-
Si aucun des deux objets n'est un ensemble de nœuds et que l'opérateur est = ou !=
-
Les deux objets sont alors convertis en le même type d'objet, et le fonctionnement de la comparaison est similaire à celui décrit précédemment. Si l'un des objets est une valeur booléenne, les objets sont alors convertis en valeurs booléennes comme si la fonction boolean() avait été appelée. Si aucun des deux objets n'est une valeur booléenne, les objets sont alors convertis en nombre. Si l'un des objets est un nombre, les objets sont alors convertis en valeurs numériques comme si la fonction number() avait été appelée. Sinon, tous les objets sont convertis en chaînes comme si la fonction string() avait été appelée.
-
Si aucun des deux objets ne représente un ensemble de nœuds et que l'opérateur est < , > , ou > =
-
Les objets sont alors convertis en nombres puis comparés.
-
Si l'un des objets ou les deux représente un ensemble de nœuds
-
Tout se complique alors. Si les deux objets représentent un ensemble de nœuds, une comparaison est vraie lorsque la valeur de chaîne d'au moins un nœud du premier ensemble de nœuds est égale à la valeur de chaîne d'au moins un nœud du second ensemble de nœuds. Si l'un des objets est un ensemble de nœuds et l'autre un nombre, une chaîne ou une valeur booléenne, la comparaison est vraie lorsqu'il existe au moins un nœud de l'ensemble de nœuds dont le nombre, la chaîne ou la valeur booléenne est égal à ce nombre, cette chaîne ou cette valeur booléenne.
|