本文详细解析 JavaScript 中的显式类型转换机制,涵盖将值转换为字符串、数字和布尔值的三种核心方法。重点讲解 toString()、String()、Number()、parseInt()、parseFloat() 及 Boolean() 函数的转换规则、边界条件及对象处理逻辑,帮助开发者准确控制数据类型转换行为。
JavaScript 显式类型转换概述
基本概念
类型转换是指将值从一种类型转换为另一种类型的过程。该过程始终返回基本类型值,例如字符串、数字或布尔值,而不会返回引用类型值。类型转换可分为“显式”和“隐式”两类:“显式”转换通常发生在静态类型语言的编译阶段,而“隐式”转换则发生在动态类型语言的运行时。
显式类型转换
字符串类型转换:toString() 与 String()
非字符串到字符串的类型转换
利用 toString() 方法
数字、布尔值、字符串和对象都具备 toString() 方法,但 null 和 undefined 没有此方法。
示例:
var name = "Tom",
age = 19,
isStudent = true;
console.log(name.toString()); //输出:"Tom"
console.log(age.toString()); //输出:"19"
console.log(isStudent.toString()); //输出:"true"
var obj = {
name: "Tom"
},
arr = [19, 20];
console.log(obj.toString()); //输出:"[object Object]"
console.log(arr.toString()); //输出:"19,20"
*基本类型值不能直接调用 toString() 方法,因此 JavaScript 引擎会自动为基本类型值创建一个封装对象,随后对该对象调用 toString()。
利用 String() 方法
该方法能够将任何类型的值转换为字符串,其基本转换规则如下:
1、若值拥有 toString() 方法,则调用该方法进行转换; 2、若值为 null,则返回字符串“null”; 3、若值为 undefined,则返回字符串“undefined”。
示例:
console.log(String(11)); //输出:"11"
console.log(String(true)); //输出:"true"
console.log(String("love")); //输出:"love"
console.log(String(null)); //输出:"null"
console.log(String(undefined)); //输出:"undefined"
console.log(String({
name: "Tom"
})); //输出:"[object Object]"
console.log(String([1, 2])); //输出:"1,2"
数字类型转换:Number()、parseInt() 与 parseFloat()
非数字到数字的类型转换
利用 Number() 方法
该方法适用于任何数据类型,其基本转换规则如下: 1、若为 Boolean 值,true 转换为 1,false 转换为 0; 2、若为数字值,直接传入并返回; 3、若为 null 值,返回 0; 4、若为 undefined 值,返回 NaN; 5、若为字符串,遵循以下规则:
- 若字符串仅包含数字,则将其转换为十进制数。例如“123”转换为 123,“011”转换为 11(忽略前导 0);
- 若字符串包含有效的浮点格式,如“1.1”,则转换为对应的浮点数值(同样忽略前导 0);
- 若字符串为空,不包含任何字符,则转换为 0;
- 若字符串包含除上述情况外的其他字符,则转换为 NaN。
6、若为对象,首先检查该值是否拥有 valueOf() 方法。若存在且能成功返回基本类型值,则使用该方法的返回值进行强制类型转换;若不存在,则使用 toString() 的返回值进行强制类型转换。如果 valueOf() 和 toString() 均不返回基本类型值,则抛出 TypeError 错误。
*valueOf() 和 toString() 均属于 Object 的原型方法,其中 valueOf() 返回类型不变的原始值,而非值的字符串形式。
示例:
console.log(Number(true)); //输出:1
console.log(Number(10)); //输出:10
console.log(Number(null)); //输出:0
console.log(Number(undefined)); //输出:NaN
console.log(Number("123")); //输出:123
console.log(Number("01")); //输出:1
console.log(Number("1.1")); //输出:1.1
console.log(Number("")); //输出:0
console.log(Number("love")); //输出:NaN
//转换过程:{name: "Tom"} => "[object Object]" => NaN
console.log(Number({
name: "Tom"
})); //输出:NaN
//转换过程:[1,2] => "1,2" => NaN
console.log(Number([1, 2])); //输出:NaN
//转换过程:[999] => "999" => 999
console.log(Number([999])); //输出:999
console.log(Number(new Date)); //以微秒为单位的数字时间
利用 parseInt() 方法
该方法专门用于将字符串转换为整数。非字符串参数会首先被强制转换为字符串,其基本转换规则如下: 1、若第一个字符不是数字或负号,返回 NaN; 2、若第一个字符是数字,则继续解析后续字符,直到解析完所有后续字符或遇到非数字字符为止。
示例:
//非字符串类型
//转换过程:10.1 => "10.1" => 10
console.log(parseInt(10.1)); //输出:10
//转换过程:0.0000008 => "8e-7" => 8
console.log(parseInt(0.0000008)); //输出:8
//字符串类型
console.log(parseInt("10abc")); //输出:10
console.log(parseInt("abc")); //输出:NaN
*从 ES5 开始,parseInt() 默认转换为十进制数。如需转换其他基数(即指定进制),可为该函数提供第二个参数,例如:parseInt( “0xAF”, 16 ) 。
parseFloat() 方法与 parseInt() 类似,用于解析浮点数。字符串中的第一个小数点是有效的,而第二个小数点被视为无效。此外,parseFloat() 方法仅能解析十进制数。
示例:
console.log(parseFloat("10abc")); //输出:10
console.log(parseFloat("11.22.33")); //输出:11.22
console.log(parseFloat("011.22")); //输出:11.22
布尔类型转换:Boolean()
非布尔值到布尔值的类型转换
利用 Boolean() 方法
可以对任何数据类型的值调用 Boolean() 方法,且总会返回一个 Boolean 值。其基本转换规则如下: 1、以下值会被转换为 false:
- undefined
- null
- false
- +0、-0 和 NaN
- “”
2、上述列举之外的值均可被转换为 true。
示例:
console.log(Boolean(undefined)); //输出:false
console.log(Boolean(null)); //输出:false
console.log(Boolean(false)); //输出:false
console.log(Boolean(0)); //输出:false
console.log(Boolean(-0)); //输出:false
console.log(Boolean(NaN)); //输出:false
console.log(Boolean("")); //输出:false
所有对象均可被转换为 true 的值,包括使用 Boolean、Number 和 String 创建的基本包装类型的对象。
示例:
console.log(Boolean(new Boolean(false))); //输出:true
console.log(Boolean(new Number(0))); //输出:true
console.log(Boolean(new String(""))); //输出:true
console.log(Boolean([])); //输出:true
console.log(Boolean({})); //输出:true
如有错误,欢迎指正,本人不胜感激。
以上所述是小编给大家介绍的JavaScript显式数据类型转换详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!