javascript - conversion de type js
伊谢尔伦
伊谢尔伦 2017-05-19 10:12:39
0
5
538
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 ?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

répondre à tous(5)
我想大声告诉你

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.

迷茫

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

.
某草草

Problème du mécanisme d'analyse JS

PHPzhong

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

.
左手右手慢动作

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');
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal