显示数据类型转换
String()函数进行显示转换
Number()函数进行显示转换
Boolean()函数进行显示转换
隐式数据类型转换
算术运算隐式转化
比较操作隐式转化
赋值操作
在JavaScript中,数据类型转换是常见的操作,它允许将一种类型的数据转换为另一种类型。数据类型转换可以分为两种类型:隐式类型转换(也称为类型强制或类型合)和显式类型转换。
显示数据类型转换
显式类型转换是由明确调用函数或方法来实现的,转换的意图是明确的。
String()函数进行显示转换
String()是一个JavaScript内置的构造函数,用于将任何类型的值转换为字符串。语法如下:
let str = String(需要转换的字符);
利用String()函数将布尔值和数字转换为字符串,并用typeof语句查看数据类型,可以发现转换后的数据类型为string。
完整代码:
<script>// 1) 转字符串console.log(typeof true);// 'boolean'console.log(typeof 100);// 'number'console.log(typeof String(100));// 'string'console.log(typeof String(true));// 'string'</script>
Number()函数进行显示转换
Number()是JavaScript中的一个内置构造函数,它用于将任何类型的值转换为数字。语法如下:
let num = Number(需要转换的数字);
注意:利用Number()将字符串转为数字是不可行的,会输出NaN(not a number),意思是非数字,特殊的数值,但是数据类型也是number,因为已经进行了数据类型的转换。
将指定的数据转换为number类型,并用typeof语句检测转换前后的数据类型,结果如下:
如果对布尔值进行转换,真值true会转换为1,假值false转换为0,数据类型均为number。
同理,空值(空字符串、null等)的布尔值为false,转换为数字类型,结果是0,undefined缺少值转换为数字类型,结果是NaN,但数据类型均为number。
逻辑运算的结果为真或假,也就是1或0,转换为数字类型也是同理。任何与逻辑运算相关的,都可以归纳为true和false,true对应1,false对应0。
完整代码如下:
<script>// 2)转数字类型console.log(typeof "abc");// 'string'console.log(Number("abc"));// NaN (not a number) 非数字 特殊的数值。console.log(typeof Number("abc"));// 'number'console.log(typeof "100");// 'string'console.log(Number("100"));// 100console.log(typeof Number("100"));// 'number'console.log(typeof true);// 'boolean'console.log(typeof true);// 'boolean'console.log(typeof Number(true));// 'number'console.log(typeof Number(true));// 'number'console.log(Number("")); // 0console.log(Number(undefined)); // 0console.log(Number(null)); // 0console.log(typeof ""); // stringconsole.log(typeof true); // booleanconsole.log(typeof false); // booleanconsole.log(typeof Number("")); // numberconsole.log(typeof Number(null)); // numberconsole.log(typeof Number(undefined)); // numberconsole.log(typeof Number(true)); // numberconsole.log(typeof Number(false)); // numberconsole.log(Number(true)); // 1console.log(Number(false)); // 0console.log(Number("")); // 0console.log(Number(null)); // 0console.log(Number(undefined)); // NaNconsole.log(Number(1 > 2)); // 0console.log(Number(1 < 2)); // 1console.log(typeof Number(1 > 2)); // numberconsole.log(typeof Number(1 < 2)); // number </script>
Boolean()函数进行显示转换
Boolean()是JavaScript中的一个内置构造函数,用于将任何类型的值转换为布尔值。语法如下:
let flag = Boolean(需要转换的字符);
在JavaScript中,将不同类型的值转换为布尔值时,非空字符串和所有非零数字(包括正数、负数和NaN以外的特殊值)都会转换为true,而空字符串、数字0、-0、NaN、null和undefined则会转换为false。
完整代码:
<script>// 2)转数字类型console.log(Boolean("abc")) // trueconsole.log(Boolean(12)) // trueconsole.log(Boolean([1, 2])) // trueconsole.log(Boolean({ k: 2 })) // trueconsole.log(Boolean(0)); // falseconsole.log(Boolean(1 > 2)) // falseconsole.log(Boolean("")); // falseconsole.log(Boolean(null)); // falseconsole.log(Boolean(undefined)); // falseconsole.log(Boolean(NaN)); // false</script>
隐式数据类型转换
隐式类型转换发生在JavaScript解释器在执行代码时自动将一种类型的值转换为另一种类型,而不需要者显式地指定。
算术运算隐式转化
任意数据类型和字符串拼接,都会变成字符串类型,利用“+”号连接的两个数据,一个为字符串,+"字符串",得到的数据就是字符串类型。
完整代码:
<script>// 任意数据类型和字符串拼接,都会变成字符串类型console.log(typeof 10);// 'number'console.log(typeof (10 + "abc"));// 'string'console.log(typeof true);//'boolean'console.log(typeof (true + ""));//'string'console.log(typeof (undefined + ""));//'string'</script>
使用“-0”可以隐式转换成数字类型,任何数字减去0都等于其本身。
完整代码如下:
<script>// 使用“-”可以隐式转换成数字类型// 任何数字减去0都等于其本身console.log(100 - 60);// 40console.log(typeof "100");// 'string'console.log(typeof ("100" - 0));// 'number'</script>
使用“*1”可以隐式转换成数字类型,任何数字乘以1都等于其本身。
完整代码如下:
<script>// 任何数字乘以1都等于其本身console.log(typeof "100");// 'string'console.log(typeof ("100" * 1));// 'number'</script>
比较操作隐式转化
在进行比较时,不同类型的值会被转换成布尔值或数字,以便进行比较。例如,"0" == 0
的结果是 true
,因为字符串"0"
被转换成了数字0
。
完整代码:
<script>// 字符串与数字的比较console.log("0" == 0); // true,因为字符串 "0" 被转换成数字 0// 布尔值与数字的比较console.log(true == 1); // true,因为布尔 true 被转换成数字 1console.log(false == 0); // true,因为布尔 false 被转换成数字 0// 对象与原始类型的比较let obj = new String("100");console.log(obj == 100); // true,因为对象 obj 被转换成字符串 "100",然后 "100" 被转换成数字 100// null 和 undefined 的比较console.log(null == undefined); // true,null 和 undefined 是相等的console.log(null == 0); // false,null 和 0 是不相等的// NaN 的比较console.log(0 / 0 == 0 / 0); // false,因为 NaN 与任何值(包括自身)比较都返回 false// 空值和非空值的比较console.log("" == false); // true,空字符串被转换成数字 0,与 false(转换成数字 0)相等console.log(" " == false); // false,非空字符串被转换成数字,与 false 不相等</script>
假设有多个比较运算时,会将结果转换为0或1,再继续比较。
假设需要比较1>2<3,程序首先会先比较1>2,结果为假,所以值为0,然后比较0<3,是真,所以输出true。
比较1<2>3,程序首先会先比较1<2,结果为真,所以值为1,然后比较1>3,是假,所以输出false。
赋值操作
在JavaScript中,赋值操作使用单个等号=
来执行。赋值时,赋值的值(称为源值)通常会被转换成与目标变量的类型一致的值。
完整代码如下:
<script>let num; // 声明一个变量,未初始化// 将字符串赋值给num,隐式转换为数字num = "123"; // num 现在是数字 123// 将布尔值赋值给num,隐式转换为数字num = true; // num 现在是数字 1console.log(num);// 将对象赋值给字符串变量let str;str = new String("Hello"); // str 现在是字符串 "Hello"console.log(str);// 将数字赋值给布尔值变量,隐式转换为布尔值let bool;bool = 0; // bool 现在是 false,因为 0 被转换成 falseconsole.log(bool);bool = 1; // bool 现在是 true,因为 1 被转换成 trueconsole.log(bool);// 将null赋值给任何变量let obj;obj = null; // obj 现在是 nullconsole.log(obj);// 将undefined赋值给任何变量let undef;undef = undefined; // undef 现在是 undefinedconsole.log(undef);</script>