Les types de données JavaScript sont divisés en six types, à savoir nul, non défini, booléen, chaîne, nombre et objet. object est un type de référence et les cinq autres 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, 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 '11' < 4 //false
Ce chapitre présente séparément la conversion implicite de types de données en JavaScript. Une bonne compréhension peut simplifier de nombreuses opérations dans des applications pratiques.
Voir l'exemple de code suivant :
var arr = [5]; console.log(arr+"");
Le code ci-dessus est une opération pour convertir implicitement un tableau en chaîne. N'est-il pas beaucoup plus simple que la méthode suivante :
var arr = [5]; console.log(arr.toString());
Les conversions implicites de types de données comme celles ci-dessus sont largement utilisées dans le codage réel.
1. Conversion de types de données entre types de valeurs :
Pour les types de données en JavaScript, veuillez vous référer au chapitre « Explication détaillée des types de données JavaScript ».
(1). Les nombres et les chaînes utilisent des opérateurs :
Si vous utilisez l'opérateur pour opérer sur des nombres et des chaînes, les nombres seront d'abord convertis en chaînes, puis des opérations de concaténation de chaînes seront effectuées :
var antzone = "antzone"; var num = 8; console.log(antzone+num);
(2). Opérations d'opérateur impliquant des valeurs booléennes :
S'il y a un type booléen impliqué, la valeur booléenne sera d'abord convertie en nombre ou chaîne correspondant, puis la connexion de chaîne ou l'opération arithmétique correspondante sera effectuée.
var bool = true; var num = 8; console.log(bool + num);
Le code ci-dessus convertit d'abord vrai en nombre 1, puis effectue une addition arithmétique.
var bool = true; var num = "8"; console.log(bool + num);
La valeur booléenne ci-dessus sera convertie en la forme de chaîne correspondante "true", puis la concaténation de chaînes est effectuée.
(3). Opération de soustraction :
Si une opération de soustraction est effectuée, les deux opérandes seront d'abord convertis en nombres, puis l'opération arithmétique sera effectuée :
var bool = true; var num = "8"; console.log(bool - num);
true sera converti en nombre 1, la chaîne "8" sera convertie en nombre 8, puis des opérations arithmétiques seront effectuées.
Il en va de même pour les conversions de multiplication, division, supérieur à, inférieur à et soustraction, je ne donnerai donc plus d'exemples.
(4).==Opération égalité :
undefined et null sont spéciaux. Ils utilisent tous deux l'opérateur == pour renvoyer true.
console.log(undefined==null);
Lors de la comparaison d'autres types de valeurs, les opérandes seront convertis en nombres
console.log("3"==3);
Le code ci-dessus convertira la chaîne « 3 » en un nombre puis la comparera.
console.log("1"==true);
Le code ci-dessus convertira respectivement "1" et vrai en nombres, puis les comparera.
2. Convertir le type référence en type valeur :
La conversion des types référence (objets) en types valeur est beaucoup plus compliquée. La distribution est présentée ci-dessous.
Les deux méthodes d'héritage d'objet peuvent nous aider à réaliser la fonction de conversion d'objet en type valeur :
Méthode (1).toString().
Méthode (2).valueOf().
Normalement, nous pensons que pour convertir un objet en chaîne, vous devez appeler la méthode toString(), et pour convertir un objet en nombre, vous devez appeler la méthode valueOf(), mais ce n'est pas ça. simple lorsqu'il est réellement appliqué. Voir l'exemple de code suivant :<🎜 >
var obj = { webName: "脚本之家", url:"softwhy.com" } console.log(obj.toString());
var arr = [1, 2, 3]; console.log(arr.valueOf());
var arr = [1, 2, 3]; console.log(arr.toString());
数组对象的toString()方法能够将数组转换为能够反映此数组对象的字符串。
总结如下:
(1).有些对象只是简单继承了toString()或者valueOf()方法,比如第一个例子。
(2).有些对象则不但是继承了两个方法,而且还进行了重写。
所以有些对象的方法能够达成转换成字符串或者数字的目标,有些则不能。
调用toString()或者valueOf()将对象转换成字符串或者数字的规则如下:
调用toString()时,如果对象具有这个方法,则调用此方法;如果此方法返回一个值类型数据,那么就返回这个值类型数据,然后再根据所处的上下文环境进行相关数据类型转换。如果没有toString(),或者此方法返回值并不是一个值类型数据,那么就会调用valueOf()(如果此方法存在的话),如果valueOf()返回一个值类型数据,那么再根据所处的上下文环境进行相关的数据类型转换。
进一步说明:
(1).上面介绍了通常默认情况下valueOf()和toString()方法的作用(将对象转换为数字或者字符串),但是需要注意的是,这并不是硬性规定,也就是说并不是valueOf()方法必须要返回数字或者toString()方法必须要转换为字符串,比如简单继承的这两个方法就无法进行实现转换为数字和字符串的功能,再比如,我们可以自己称谢这两个方法,返回值也没有必要是数字或者字符串。
(2).还有需要特别注意的一点就是,很多朋友认为,转换为字符串首先要调用toString()方法, 其实这是错误的认识,我们应该这么理解,调用toString()方法可以转换为字符串,但不一定转换字符串就是首先调用toString()方法。
看如下代码实例:
var arr = []; arr.valueOf = function () { return "1"; } arr.toString = function () { return "2"; } console.log(arr + "1");
上面的代码中,arr是要被转换为字符串的,但是很明显是调用的valueOf()方法,而没有调用toString()方法。有些朋友可能会有这样的质疑,难道[2]这样的数字转换成字符串"2",不是调用的toString()方法吗。
代码如下:
var arr = [2]; console.log(arr + "1");
其实过程是这样的,首先arr会首先调用valueOf()方法,但是数字的此方法是简单继承而来,并没有重写(当然这个重写不是我们实现),返回值是数组对象本身,并不是一个值类型,所以就转而调用toString()方法,于是就实现了转换为字符串的目的。
总结如下:
大多数对象隐式转换为值类型都是首先尝试调用valueOf()方法。但是Date对象是个例外,此对象的valueOf()和toString()方法都经过精心重写,默认是调用toString()方法,比如使用+运算符,如果在其他算数运算环境中,则会转而调用valueOf()方法。
代码实例如下:
var date = new Date(); console.log(date + "1"); console.log(date + 1); console.log(date - 1); console.log(date * 1);
以上内容是小编给大家介绍的JavaScript数据类型之隐式类型转换的全部内容,希望大家喜欢。