recherche

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

javascript - conversion de type js

function a () {

}
a.toString = function(){
    console.log(1)
}
a.valueOf = function(){
    console.log(2)
}
a + '1' //2

Pourquoi seulement 2 sont-ils sortis ? Les 1 et 2 ne devraient-ils pas être affichés ?

伊谢尔伦伊谢尔伦2774 Il y a quelques jours543

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

  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:14:39

    Permettez-moi d'être plus précis : généralement, une seule des deux méthodes, valueOf et toString, peut être appelée. Selon le type d'objet, il existe des ordres de jugement différents. Plus précisément :
    1. Si l'objet doit être converti en chaîne, il détectera d'abord si l'objet a une méthode toString(), l'appellera et renverra la valeur d'origine, puis convertira la valeur en chaîne. Si l'objet n'a pas de méthode toString() ou si cette méthode ne renvoie pas de valeur primitive. Ensuite, js détectera si l'objet a une méthode valueOf(), l'appellera si elle existe, appellera et renverra également la valeur d'origine, puis convertira cette valeur en chaîne. Si ni les méthodes valueOf ni toString de l'objet n'existent, une exception TypeError sera levée.
    2. Si l'objet doit être converti en nombre, il détectera s'il possède une méthode valueOf(). S'il ne détecte pas la méthode toString(), le principe spécifique est le même que ci-dessus.
    3. Pour tous les objets non-date, la conversion de l'objet en la valeur d'origine est essentiellement la conversion de l'objet en un nombre, et toutes les valeurs de() sont appelées en premier. l'objet en chaîne est utilisé en mode de conversion.
    Spécifiquement pour votre question, a n'est pas un objet date, donc la méthode valueof() est appelée en premier Après une conversion réussie, la méthode toString() ne sera naturellement plus appelée.

    répondre
    0
  • 迷茫

    迷茫2017-05-19 10:14:39

    Lors de l'exécution de a+'1', seule la méthode a.valueOf est appelée et la méthode toString n'est pas appelée. Vous pouvez d'abord comprendre le mécanisme des méthodes toValueOf et toString

    .

    répondre
    0
  • 某草草

    某草草2017-05-19 10:14:39

    Problème du mécanisme d'analyse JS

    répondre
    0
  • PHPz

    PHPz2017-05-19 10:14:39

    Parce qu'il s'agit du mécanisme d'analyse de js, votre utilisation de "+" indique le problème de l'utilisation de la conversion implicite. Si vous n'avez pas de dispositions particulières, js appellera automatiquement la méthode toString telle que la conversion. Si vous écrivez valueOf, il sera converti en fonction de valueOf. Bien sûr, toString a une priorité plus élevée

    .

    répondre
    0
  • ringa_lee

    ringa_lee2017-05-19 10:14:39

    Lorsque vous effectuez l'opération d'addition, vous appellerez uniquement valueOf. Parce qu'il n'est pas imprimé, il n'est pas nécessaire de le convertir en chaîne, et bien sûr, toString ne sera pas déclenché.
    Si vous l'imprimez comme ceci, vous pouvez voir que les deux méthodes seront appelées :

    console.log(a + '1');

    répondre
    0
  • Annulerrépondre