recherche

Maison  >  Questions et réponses  >  le corps du texte

Quel opérateur d'égalité (== vs. ===) doit être utilisé dans les comparaisons JavaScript ?

<p>J'utilise JSLint pour explorer JavaScript et il renvoie de nombreuses suggestions pour remplacer <code>==</code> (deux signes égaux) par <code>===</code> signes égaux) lors de l'exécution d'opérations telles que la comparaison de <code>idSele_UNVEHtype.value.length == 0</code> dans une instruction <code>if</code> </p> <p>Le remplacement de <code>==</code> par <code>===</code> présente-t-il un avantage en termes de performances ? </p> <p>Toute amélioration des performances serait la bienvenue car il existe de nombreux opérateurs de comparaison. </p> <p>Y aura-t-il un gain de performances par rapport à <code>==</code> sans conversion de type ? </p>
P粉023650014P粉023650014518 Il y a quelques jours615

répondre à tous(2)je répondrai

  • P粉336536706

    P粉3365367062023-08-24 09:01:58

    Utilisez l'opérateur == (Equal)

    true == 1; //true, because 'true' is converted to 1 and then compared
    "2" == 2;  //true, because "2" is converted to 2 and then compared

    Utilisez l'opérateur === (Identité)

    true === 1; //false
    "2" === 2;  //false

    C'est parce que l'opérateur d'égalité == effectue un cast de type, ce qui signifie que l'interpréteur essaiera implicitement de convertir la valeur avant de comparer.

    D'un autre côté, l'opérateur identity === ne fait pas de coercition de type, donc les valeurs ne sont pas converties lors de la comparaison.

    répondre
    0
  • P粉178894235

    P粉1788942352023-08-24 00:58:02

    L'opérateur d'égalité stricte (===) 的行为与抽象相等运算符 (==) est le même, sauf qu'aucune conversion de type n'est effectuée et que les types doivent être les mêmes pour être considérés comme égaux.

    Référence : Tutoriel JavaScript : Opérateurs de comparaison

    == 运算符将在进行任何必要的类型转换后比较是否相等。 === 运算符不会进行转换,因此如果两个值不是同一类型,=== 将简单地返回 . Les deux sont tout aussi rapides.

    Citation du grand JavaScript: The Good Parts de Douglas Crockford,


    Mise à jour

    @Casebash dans les commentaires et @Phillipe Laybaert réponse sur les objets. Pour les objets, ===== se comportent de manière cohérente les uns par rapport aux autres (sauf cas particuliers).

    var a = [1,2,3];
    var b = [1,2,3];
    
    var c = { x: 1, y: 2 };
    var d = { x: 1, y: 2 };
    
    var e = "text";
    var f = "te" + "xt";
    
    a == b            // false
    a === b           // false
    
    c == d            // false
    c === d           // false
    
    e == f            // true
    e === f           // true

    Le cas particulier est celui où vous comparez une primitive à un objet qui est évalué comme la même primitive en raison de l'objet chaîne créé par son constructeur toStringvalueOf 方法。例如,考虑将字符串基元与使用 String.

    "abc" == new String("abc")    // true
    "abc" === new String("abc")   // false

    Ici == 运算符检查两个对象的值并返回 true,但是 === 看到它们类型不同并返回 false。哪一个是正确的?这实际上取决于您要比较的内容。我的建议是完全绕过这个问题,只是不要使用 String Le constructeur crée un objet chaîne à partir d'une chaîne littérale.

    Référence
    https://262.ecma-international.org/5.1/#sec-11.9.3

    répondre
    0
  • Annulerrépondre