欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript显式数据类型转换详解

程序员文章站 2023-11-18 16:19:52
基本概念 将值从一种类型转换为另一种类型称为类型转换,类型转换总是返回基本类型值,如字符串、数字和布尔值,不会返回引用类型值。 类型转换分为“显式”和“隐式”:“显式”...

基本概念

将值从一种类型转换为另一种类型称为类型转换,类型转换总是返回基本类型值,如字符串、数字和布尔值,不会返回引用类型值。
类型转换分为“显式”和“隐式”:“显式”转换发生在静态类型语言的编译阶段,而“隐式”转换则发生在动态类型语言的运行时。

显式类型转换

非字符串到字符串的类型转换

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() 方法

这个方法可以用于任何数据类型,基本的转换规则是:
1、如果是boolean值,true和false将分别被转换为1和0;
2、如果是数字值,只是简单的传入和返回;
3、如果是null值,返回0;
4、如果是undefined值,返回nan;
5、如果是字符串,遵循下列规则:

  1. 如果字符串中只包含数字,将其转换为十进制。即“123”转换为123,“011”转换为11(忽略前导0);
  2. 如果字符串中包含有效的浮点格式,如“1.1”将其转换为对应的浮点数值(同样忽略前导0);
  3. 如果字符串是空的,不包含任何字符,则将其转换为0;
  4. 如果字符串中包含除上述以外的字符,则将其转换为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 值,基本的转换规则是:
1、以下这些是可以被转换为 false 的值:

  1. undefined
  2. null
  3. false
  4. +0、-0 和 nan
  5. “”

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显式数据类型转换详解整合,希望对大家有所帮助