JS中的显式转换
显式转换
显示转换一般指使用Number、String和Boolean三个构造函数,手动将各种类型的值,转换成数字、字符串或者布尔值。
布尔型转换
-
ECMAScript中所有类型的值都有与Boolean值(true和false)等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()。
数据类型 转换为true 转换为false String 任何非空字符串 空字符串 Number 任何非零数字值 0和NaN Object 任何对象 null Undefined 不适用 undefined -
举例说明
Boolean(null);//false Boolean(undefined);//false Boolean("");//false Boolean(0);//false Boolean({});//true Boolean([]);//true
数值转换
有三个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()
-
Number()
Number()函数的转换规则:
(1)如是布尔值,true转换为1,false转换为0
(2)如是null,返回0
(3)如是undefined,返回NaN
(4)如是字符串,规则:
- 如字符串中只包含数字(包括前面带正负号的情况),将其转换为十进制数值
- 如字符串中包含有效的浮点格式,将其转换为对应的浮动数值
- 如字符串中包含有效的十六进制格式,例如“oxf”,将其转换为相同大小的十进制整数值
- 如字符串为空,转换为0
- 如字符中包含除上述格式之外的字符,将其转换为NaN
(5)如果是对象,自动调用对象的valueOf()方法,再依照前面的规则转换返回的值,如果转换结果为NaN,调用对象的toString()方法,再依照前面的规则转换
-
valueOf():JavaScript调用valueOf方法将对象转换为原始值。你很少需要自己调用
valueOf
方法;当遇到要预期的原始值的对象时,JavaScript会自动调用它。 -
不同类型对象返回valueOf()方法的返回值
对象 返回值 Array.valueOf() 返回数组对象本身。 Boolean.valueOf() 布尔值。 Date.valueOf() 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数。 Function.valueOf() 函数本身。 Number.valueOf() 数字值。 Object.valueOf() 对象本身。这是默认情况。 String.valueOf() 字符串值。
console.log(Number("abc"));//NaN console.log(Number("12ad"));//NaN console.log(Number("12"));//12 console.log(Number("1.1"));//1.1 console.log(Number(true));//1 console.log(Number(false));//0 console.log(Number(null));//0 console.log(Number(undefined));//NaN console.log(Number(" "));//0 console.log(Number(""));//0 console.log(Number("0xf"));//15 console.log(Number("0070"));//70
-
parseInt()函数
规则:
(1)第一个参数是要解析的字符串,只会解析从第一个字符到不是数字的字符
(2)忽略字符串前面的空格,直到找到第一个非空格字符,如果第一个字符不是数字或者负号,会返回NaN,用parseInt()转换空字符串会返回NaN
(3)如果字符串以“ox”开头,且后跟数字字符,会当作一个十六进制整数
(4)第二个参数表示转换时使用的基数(多少进制),进制范围是2到36,没写该参数时默认是10进制
console.log(parseInt('22e3'))//22 console.log(parseInt('e3'))//NaN console.log(parseInt(10.59))//10 console.log(parseInt(1,2))//1,1在2的进制范围内,所以能取到 console.log(parseInt(3,2))//NaN,3不在2的进制范围内,所以不能取到 console.log(parseInt(0x99))//153
-
parseFloat()函数
(1)与parseInt()函数类似,也是从第一个字符开始解析每个字符,一直解析到字符串末尾,或解析到遇到一个无效的浮点数字字符为止。能够解析小数点,而parseInt()只能取到小数点前面的值
(2)字符串中的第一个小数点是有效的,第二个小数点就无效了
(3)只能解析十进制数,没有第二个参数
console.log(parseFloat("10qq"));//10 console.log(parseFloat("10.5"));//10.5 console.log(parseFloat("0xAF"));//0 console.log(parseFloat("23.1.4"));//23.1
字符串转换
-
toString()方法
(1)可以将其他类型的转成字符串型。数值、布尔值、对象和字符串值都有toString()方法。但null和undefined没有这个方法
(2)可以传递一个参数:输出数值的基数。通过传递参数,可以输出二进制、八进制、十六进制及其他有效进制格式表示的字符串值
var age=11;
console.log(age.toString());//"11"
var b1=true;
console.log(b1.toString());//"true"
var num=10;
console.log(num.toString());//"10",默认是10进制
console.log(num.toString(2));//"1010",将num转成2进制
console.log(num.toString(8));//"12",将num转成8进制
console.log(num.toString(10));//"10"
console.log(num.toString(16));//"a"
-
string()方法
null和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"