Maison >interface Web >js tutoriel >Une brève discussion sur la conversion de type implicite en JavaScript

Une brève discussion sur la conversion de type implicite en JavaScript

黄舟
黄舟original
2017-03-15 14:53:241501parcourir

Le

type de données de JavaScript est divisé en six types, à savoir null, indéfini, booléen, chaîne, nombre, objet. L'objet est un type de référence , et les cinq autres types de sont des types de base ou des types primitifs. Nous pouvons utiliser la méthode typeof pour imprimer à quel type appartient quelque chose. Pour comparer des variables de différents types, vous devez d'abord convertir le type, ce qui est appelé conversion de type. La conversion de type est également appelée conversion implicite. Les conversions implicites se produisent généralement avec les opérateurs addition, soustraction, multiplication, division, égal et inférieur à, supérieur à, etc. .

typeof '11'  //string       
typeof(11)  //number
&#39;11&#39; < 4     //false

Conversion des types de base

Parlons d'abord de l'addition, de la soustraction, de la multiplication et de la division :

1.ChaînesAjoutez des nombres, le nombre sera converti en chaîne.

2. Soustrayez les chaînes des nombres et convertissez les chaînes en nombres. Si la chaîne n'est pas un nombre pur, elle sera convertie en NaN. Il en va de même pour les chaînes moins les nombres. La soustraction de deux chaînes les convertit également d'abord en nombres.

3. Il en va de même pour les conversions de multiplication, division, supérieur à, inférieur à et soustraction.

//隐式转换 + - * == / 
// + 
10 + &#39;20&#39;    //2010
// -
10 - &#39;20&#39;    //-10
10 - &#39;one&#39;   //NaN
10 - &#39;100a&#39;  //NaN
// *
10*&#39;20&#39;      //200
&#39;10&#39;*&#39;20&#39;    //200
// /
20/&#39;10&#39;      //2
&#39;20&#39;/&#39;10&#39;    //2
&#39;20&#39;/&#39;one&#39;  //NaN

Jetons un coup d'œil à un autre ensemble de ==.

1. non défini est égal à null

2. Lorsque vous comparez des chaînes et des nombres, convertissez les chaînes en nombres

3 Lorsque vous comparez des nombres en booléens, convertissez des booléens en nombres<.>

4. Lorsque vous comparez des chaînes et des booléens, convertissez les deux en nombres

// ==
undefined == null;    //true
&#39;0&#39; == 0;            //true,字符串转数字
0 == false;           //true,布尔转数字
&#39;0&#39; == false;       //true,两者转数字
null == false;       //false
undefined == false;  //false

Conversion des types de référence

La comparaison entre les types de base est relativement simple. . La comparaison entre les types de référence et les types de base est relativement compliquée. Tout d'abord, le type de référence doit être converti en type de base, puis comparé selon la méthode ci-dessus. Les types de référence convertis en booléens sont tous vrais. Par exemple, un

tableau vide, tant qu'il s'agit d'un objet, est un type référence, donc [] est vrai. Pour convertir un type de référence en nombre ou en chaîne, utilisez valueOf() ou toString(); l'objet lui-même hérite de valuOf() et toString(), et vous pouvez également personnaliser valueOf() et toString( ). En fonction de l'objet, utilisez le valueOf() hérité pour le convertir en chaîne, en nombre ou lui-même, et l'objet doit être converti en chaîne à l'aide de toString. Les objets généraux appellent valueOf() par défaut.

1. Lors de la conversion d'un objet en nombre, appelez valueOf();

2 Lors de la conversion d'un objet en chaîne, appelez toString();

Premier aperçu. dans l'exemple suivant :

0 == [];        // true, 0 == [].valueOf(); -> 0 == 0;
&#39;0&#39; == [];      // false, &#39;0&#39; == [].toString(); -> &#39;0&#39; == &#39;&#39;;
2 == [&#39;2&#39;];     // true, 2 == [&#39;2&#39;].valueOf(); -> 2 == &#39;2&#39; -> 2 == 2;
&#39;2&#39; == [2];     // true, &#39;2&#39; == [2].toString(); -> &#39;2&#39; ==&#39;2&#39;;

[] == ![];      //true, [].valueOf() == !Boolean([]) -> 0 == false -> 0 == 0;
Lorsque l'objet est converti en nombre, valueOf() est appelé avant cela, toString() est appelé donc je suppose que la méthode valueOf est comme ceci. Ainsi, l'exemple ci-dessus 0 == [] devrait être remplacé par le suivant, ce qui est plus raisonnable. Dans tous les cas, [] est finalement converti en 0.

var valueOf = function (){
    var str = this.toString();    //先调用toString(),转成字符串
    //...
}
0 == [];        // true, 0 == [].valueOf(); -> 0 == &#39;0&#39; -> 0 == 0;
ValueOf() et toString() personnalisés ;

1. ValueOf() et toString() personnalisés existent tous les deux, et valueOf() sera appelé par défaut ;

2. S'il n'y a que toString(), appelez toString();

var a = [1];

a.valueOf = function (){ return 1;}
a.toString = function (){ return &#39;1&#39;;}

a + 1;         // 2, valueOf()先调用
La suppression de valueOf() appellera toString().

var a = [1];

a.valueOf = function (){ return 1;}
a.toString = function (){ return &#39;1&#39;;}

a + 1;         // 2, 先调用valueOf()
//去掉valueOf
delete a.valueOf;
a + 1;        // &#39;11&#39;, 调用toString()
Que se passe-t-il si vous retournez autre chose ?

var a = [1];

a.valueOf = function (){return ;}
a.toString = function (){return 1 ;};

1 - a;        //NaN
D'autres objets appellent valueOf() pour convertir en différents types :

var a = {};
a.valueOf();    //Object {}
var a = [];
a.valueOf();    //[]    自己本身
var a = new Date();
a.valueOf();    //1423812036234  数字
var a = new RegExp();
a.valueOf();    //    /(?:)/  正则对象
La comparaison entre les types de référence est la comparaison des adresses mémoire, et aucune conversion implicite n'est requise ici. Pas grand chose à dire.

[] == []  //false 地址不一样

var a = [];
b = a;
b == a   //true

Conversion explicite

La conversion explicite est relativement simple, vous pouvez directement utiliser la classe comme méthode pour convertir directement.

Number([]);        //0
String([]);        //&#39;&#39;
Boolean([]);       //true
Il existe une méthode de conversion plus simple.

3 + &#39;&#39;    // 字符串&#39;3&#39;
+&#39;3&#39;      // 数字3
!!&#39;3&#39;     // true

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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