JavaScript中的数值转换和字符串转换

JavaScript中的数值转换和字符串转换

1. 数值转换

有三个函数可以把非数值转换为数值,Number()、parseInt()和parseFloat()。
Number()函数可以用于任何数据类型的转换
parseInt()与parseFloat()则专门用于把字符串转换为数值。

Number()函数
Number()函数的转换规则如下:

  • 如果是boolean值,true和false将分别被转换成1和0
  • 如果是数字值,知识简单的传入和返回
  • 如果是null值,返回0
  • 如果是undefined,返回NaN
  • 如果是对象,则调用对象的valueOf()方法,如果转换的结果为NaN,则使用toString()方法
  • 如果是字符串,则遵循以下规则:
  1. 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制的值。
  2. 如果字符串中包含有效的浮点格式,则将其转换成对应的浮点数值。
  3. 如果字符串中包含有效的十六进制数值,,则将其转换为相同大小的浮点数值。
  4. 如果字符串是空的(不包含任何字符),则将其转换为0
  5. 如果字符串中包含了除上述格式之外的字符,则转换为NaN

举几个例子吧:

var num1 = Number("Hello world!");
var num2 = Number("");
var num3 = Number("001234");
var num4 = Number(true);
console.log(num1);		//NaN
console.log(num2);		//0
console.log(num3);		//1234
console.log(num4);		//1

parseInt()函数
parseInt()函数在转换字符串时,更多的是看其是否符合数值类型。他会忽略字符串前面的空格,直至找到一个非空格字符。如果第一个字符不是数字字符或负号,parseInt()就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN(Number()对空字符串返回0)。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有字符或遇到了一个非数字字符。
如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式(十进制、八进制、十六进制数)。也就是说,如果字符串——"0x"开头且后面跟数字字符,就会将其当做一个十六进制的整数。如果字符串以"0"开头,且后面跟数字字符,则会将其当作一个八进制数来解析。
说再多也没用,来几个实在点的例子吧:

var num1 = parseInt("123green");
var num2 = parseInt("0xA");
var num3 = parseInt("");
var num4 = parseInt("22.5");
var num5 = parseInt("070");
var num6 = parseInt("70");
var num7 = parseInt("0xf");
console.log(num1);			//123
console.log(num2);			//10(十六进制数)
console.log(num3);			//NaN
console.log(num4);			//22
console.log(num5);			//70(八进制数)
console.log(num6);			//70(十进制数)
console.log(num7);			//15(十六进制数)

在使用parseInt()函数解析八进制字面量的字符串时,ECMAScript 3和5存在分歧。例如:

//ECMAScript 3认为56(八进制),ECMAScript 5认为是70(十进制)
var num = parseInt("070");

怎么办?为了消除parseInt()函数的这种困惑,可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)。如果知道解析的值是十六进制的字符串,那么久指定基数是16,作为第二个参数,可以保证得到正确的结果。
在举个例子吧:

var num1 = parseInt("0xAF",16);
var num2 = parseInt("AF");
console.log(num1);		//175
console.log(num2);		//NaN
var num3 = parseInt("10",2);
var num4 = parseInt("10",8);
var num5 = parseInt("10",10);
var num6 = parseInt("10",16);
console.log(num3);		//2(按二进制解析)
console.log(num4);		//8(按八进制解析)
console.log(num5);		//10(按十进制解析)
console.log(num6);		//16(按十六进制解析)

2. 字符串转换

要想把一个值转换为字符串有两种方式。第一种是使用几乎每个值都有的toString()方法。第二种是使用转型函数String(),这个函数可把任何类型的值转换为字符串。
toString()函数
这个方法唯一要做的就是返回相应的值的字符串表现。看例子:

var age = 11;
var ageAsString = age.toString();
var found = true;
var foundAsString = found.toString();
console.log(ageAsString);		//11
console.log(foundAsString);		//true

数值、布尔值、对象和字符串值都有toString()方法,但是null和undefined没有toString()方法。多数情况下,调用toString()方法不必传递参数。但是在调用数值的toString()方法时,可以传递一个参数,输入数值的基数(代表几进制)。
举例吧:

var num = 10;
console.log(num.toString());			//"10"(十进制)
console.log(num.toString(2));			//"1010"(二进制)
console.log(num.toString(8));			//"12"(八进制)
console.log(num.toString(10));			//"10"(十进制)
console.log(num.toString(16));			//"a"(十六进制)

String()函数
在不知道null或undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串,String()函数遵循以下规则:

  • 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
  • 如果值是null,则返回"null"
  • 如果值是undefined,则返回"undefined"

看几个例子:

var value1 = 10;
var value2 = true;
var value3 = null;
var value4;	
console.log(String(value1));			//"10"
console.log(String(value2));			//"true"
console.log(String(value3));			//"null"
console.log(String(value4));			//"undefined"

这里先后转换了4个值:数值、布尔值、null、undefined。数值和布尔值的转换结果与调用toString()方法得到的结果相同。因为null和undefined没有toString()方法,所以String()函数就返回了这两个值的字面量。

要把某个值转换为字符串,也可以使用加法运算符。
举例吧:

var num = 10;
var num1 = num+"";
console.log(num);			//10
console.log(num1);			//"10"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值