Plongeons-nous dans la Spécification ECMA. J'ai inclus les numéros de section de sorte que vous pouvez de référence.
11.8.2 L'Opérateur Supérieur à ( > )
La production RelationalExpression : RelationalExpression >
ShiftExpression est évaluée de la façon suivante:
- Laissez lref être le résultat de l'évaluation RelationalExpression.
- Laissez lval être GetValue(lref).
- Laissez rref être le résultat de l'évaluation ShiftExpression.
- Laissez rval être GetValue(rref) .
- Soit r la suite de l'exécution de l'abstrait relationnel comparaison rval < lval avec LeftFirst égale à false. (voir
11.8.5).
L'important c'est de l' Abstrait Relationnel Comparaison. Ce qui est défini:
11.8.5 L'Abstrait Relationnelle De L'Algorithme De Comparaison
L' toPrimitive
fonction sera la première à être appelée sur les Objets. Bien que ce est biaisé à la Nombre de retours si cela est possible, les Chaînes peuvent aussi être dérivées. Une fois que cela s'est produit, les éléments suivants seront examinés:
un. Si py est un préfixe de px, retourne false. (Une Chaîne de valeur p est un préfixe de la Chaîne de valeur de q, si q peut être le
résultat de la concaténation p et une autre Chaîne. r. Notez que tout
La chaîne est un préfixe de lui-même, parce que r peut être la Chaîne vide.)
b. Si px est un préfixe de py, retourner la valeur true.
c. Soit k le plus petit entier positif tel que le caractère à la position k dans px est différent du caractère à la position k dans les py. (Il doit y avoir un tel k, ni de Chaîne est un préfixe de l'autre).
d. Soit m un entier qui est le code de l'unité de valeur pour le caractère à la position k dans les px. e. Soit n le nombre entier qui est le code de l'unité de valeur pour le caractère à la position k dans les py. f. Si m < n, renvoie la valeur true. Sinon, retourne false.
Cela signifie que le premier caractère de la Chaîne qui est différent de l'autre, seront examinés. Comme il a été souligné par les Esailija, c'est à dire de l' toString()
fonction retourne un peu différente de la Chaîne pour que les autres navigateurs, résultant en une autre comparaison de prendre place.
Cette différence entre les navigateurs qui semble être valide comme il est indiqué ici:
15.2.4.4 Objet.le prototype.valueOf ( )
Lorsque le valueOf méthode est appelée, les mesures suivantes sont prises:
- Laissez-O être le résultat de l'appel ToObject en passant la valeur de l'argument.
- Si O est le résultat de l'appel au constructeur de l'Objet avec un objet hôte (15.2.2.1), puis un. Retour O ou une autre valeur, par exemple
l'hôte de l'objet à l'origine transmis au constructeur. Le spécifique
résultat renvoyé est mise en œuvre définies.
- Retour O.