Maison  >  Article  >  interface Web  >  Introduction aux règles de conversion d'objets en nombres ou en chaînes dans les compétences JavaScript_javascript

Introduction aux règles de conversion d'objets en nombres ou en chaînes dans les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:22:541811parcourir

Pendant le processus d'écriture des programmes JavaScript, JS convertira automatiquement l'objet en nombre ou en chaîne selon différents contextes avant le traitement. Les règles de cette conversion automatique sont les suivantes :

Règle de conversion automatique d'un objet en chaîne :

1. Si la classe à laquelle appartient l'objet remplace la méthode toString(), appelez cette méthode. Si le résultat de retour de l'appel toString() est Primitive (chaîne, nombre, booléen, non défini, nul), la valeur Primitive est convertie en chaîne et renvoyée.

2. Si la classe à laquelle appartient l'objet ne remplace pas la méthode toString() - le résultat de retour de l'appel toString() est "[object Object]" ou si la méthode toString() est remplacée mais que la méthode toString() est remplacée. La méthode renvoie un objet. Ensuite, JS appellera la méthode valueOf() de l'objet. Si le résultat de retour de l'appel valueOf() est Primitive (chaîne, nombre, booléen, non défini, null), la valeur Primitive sera convertie en chaîne et renvoyée.

3. Si aucun des deux points ci-dessus n'est rempli et que la valeur primitive ne peut pas être obtenue en appelant la méthode toString() ou la méthode valueOf() de l'objet, alors JS lancera une TypeError.

Règle de conversion automatique d'un objet en nombre :

1. Appelez la méthode valueOf() de l'objet. Si la valeur obtenue est une valeur Primitive, convertissez la valeur Primitive en nombre et renvoyez-la.

2. Si la valeur Primitive ne peut pas être obtenue à partir de la méthode valueOf(), alors appelez la méthode toString() de l'objet ; si toString() renvoie une valeur Primitive, convertissez la valeur Primitive en un nombre et renvoyez-la.

3. Si aucun des deux points ci-dessus n'est rempli, JS lancera une TypeError.

Comme vous pouvez le constater, les règles de conversion automatique d'un objet en chaîne et de conversion automatique d'un objet en nombre sont en fait les mêmes. La différence réside dans l'ordre d'appel de la méthode toString() et de la méthode valueOf().

Selon les règles ci-dessus, certains résultats de conversion peuvent être bien compris :


1. Pour un tableau vide, lors de sa conversion en nombre, le résultat est 0. En effet, la méthode valueOf() du tableau sera appelée en premier. Puisque valueOf() renvoie l'objet tableau lui-même, JS appellera ensuite la méthode toString() du tableau vide car le résultat de retour de toString() est vide ; array est un caractère nul, donc la chaîne vide sera finalement convertie en nombre 0 et renvoyée.

2. Pour un tableau avec un seul membre numérique, appliquez les mêmes règles pour le convertir en nombre, et le résultat final sera le nombre.

3. Pour les tableaux comportant plusieurs membres numériques, puisque la chaîne ne peut pas être convertie en nombre, le résultat final est NaN.

Quand est-il converti en chaîne ? Quand est-il converti en nombre ?

Lors de la conversion automatique de type sur un objet, JS choisira de le convertir en chaîne ou en nombre en fonction du type d'objet et de l'opérateur. Les règles spécifiques sont les suivantes :

1. Si un objet apparaît des deux côtés de l'opérateur, convertissez l'objet en chaîne.
2. Tous les objets (à l'exception des objets Date) sont d'abord convertis en nombres.
3. Pour les objets Date, convertissez-les d’abord en chaîne.

Il est à noter que pour les opérateurs, sauf lorsque des objets ou des chaînes apparaissent des deux côtés de l'opérateur, l'opération "convertir en nombre" est effectuée dans tous les autres cas. En même temps, cette opération est également liée au. ordre entre les valeurs.

Expérimenter


Copier le code Le code est le suivant :

console.log(3 * []);//0
console.log(3 * [2]);//6
console.log(3 * [1,2]);//NaN

console.log(3 [2]);//32

var maintenant = new Date();
console.log(maintenant 1);//mercredi 26 mars 2014 10:51:39 GMT 0800 (CST)1
console.log(maintenant - 1);//1395802299223
console.log(maintenant * 2);//2791604598448

console.log(true true);//2
console.log(2 null);//2, null est converti en 0
console.log(2 non défini);//NaN, non défini est converti en NaN
console.log(1 2 "chats");//3 chats
console.log(1 (2 "chats"));//12 chats

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn