第三章-----------类型转换

如果提供了其他类型的值,JavaScript会根据需要转换这个值。
10 + "object" //"10 object",把10转换为字符串
"7" * "3"//21,两个字符串都转换为数值
let n = 1-"x";//n==NaN,字符串x无法转换为数值
n + "objects"//"NaN objects,NaN转换为字符串NaN"
转换为数值:
①数值的字符串会转换为对应的数值。
②字符串开头和末尾可以有空格,但开头或末尾任何不属于数值字面量的非空格字符,都会导致字符串到数值的转换产生NaN。
③true转换为1,而false和空字符串都转换为0。
一、 转换与相等
1. 测试两个值是否相等:
①一个是严格相等操作符===,如果两个值不是同一种类型,不相等。
②==操作符
null == undefined;//true:这两个值被判定相等
"0" == 0;//true:字符串转换为数值
0 == false;//true:布尔值在比较前转换为数值
"0" == false;//true:两个操作数在比较前转换为0
2. 一个值可以转换为另一个值并不意味着这两个值是相等的。
操作符和语句期待不同类型的值,因此会执行以这些类型为目标类型的转换。if语句将undefined转换为false,但==操作符永远不会将其操作数转换为布尔值。
二、显式转换
1. 执行显示类型转换的最简单方法就是使用Boolean()、Number() 和String()函数:
Number("3");//3
String(false);//"false":或者使用false.toString()
Boolean([]);//true
2. 除null和undefined之外的所有值都有toString()方法,这个方法返回的结果通常与String()函数返回的结果相同。

3. 某些JavaScript操作符会执行隐式类型转换。+操作符有一个操作数是字符串,那它会把另一个操作数转换为字符串。一元操作符+会把自己的操作数转换为数值。一元操作符!会把自己的操作数转换为布尔值,然后再取反。

x + ""//String(x)
+x//Number(x)
x-0 //Number(x)
!!x//Boolean(x),!!两次取反

4. 数值到字符串 和 字符串到数值的转换

1)Number类定义的toString()方法接收一个可选的参数,用于指定一个基数或底数。如果不指定参数,默认基数为10。 也可以按照其他基数(2到36)来转换数值。
let n = 17;
let binary = "0b" + n.toString(2);//binary == "ob10001"
let octal = "0o" + n.toString(8);//octal == "0o21"
let hex = "0x" + n.toString(16);//hex == "0x11"
2)控制转换后得到的字符串的小数位的个数或者有效数字的个数,或者需要控制是否采用指数记数法。Number类为这些数值到字符串的转换定义了3种方法:
①toFixed()把数值转换为字符串时,可以指定小数点后面的位数,这个方法不使用指数记数法。
②toExponential()使用指数记数法,将数值转换为字符串,结果是小数点前1位,小数点后为指定位数(意味着有效数字个数比你指定的值多1位)。
③toPrecision()按照指定的有效数字个数,将数值转换为字符串。如果有效数字个数不足以显示数值的整数部分,它会使用指数记数法。
注意,这三种方法必要时都会舍去末尾的数字或者补零。
let n = 123456.789;
n.toFixed(0)//123457
n.toFixed(2)//123456.79
n.toFixed(5)//123456.78900
n.toExponential(1)//1.2e+5
n.toExponential(3)//1.235e+5
n.toPrecision(4)//1.235e+5
n.toPrecision(7)//123456.8
n.toPrecision(10)123456.7890
3)如果把字符串传给Number()转换函数,它会尝试把字符串当成整数或浮点数字面量来解析。这个函数只能处理基数为10的整数, 不允许末尾出现无关字符。
①parseInt()和parseFloat()函数(都是全局函数,不是任何类的方法)。
parseInt():只解析整数
parseFloat():既解析整数也解析浮点数
②如果字符串以0x或0X开头,parseInt()会将其解析为十六进制数值。
③parseInt()和 parseFloat()都会跳过开头的空格,尽量多地解析数字字符,忽略后面的无关字符。如果第一个非空格字符不是有效的数值字面量, 它们会返回NaN:
parseInt("3 blind mice");//3
parseFloat(" 3.14 meters")//3.14
parseInt("-12.34")//-12
parseInt("0xFF")//255
parseInt("0xff")//255
parseInt("-0XFF")//-255
parseFloat(".1")//0.1
parseInt("0.1")//0
parseInt(".1")//NaN:整数不能以.开头
parseFloat("$72.47")//NaN:数值不能以$开头
parseInt()接收可选的第二个参数,用于指定要解析数值的底(基)数,合法的值是2到36。
parseInt("11",2)//3:(1*2 + 1)
parseInt("ff",16)//255:(15*16 + 15)
parseInt("zz",36)//1295:(35*36 + 35)
parseInt("077",8)//63:(7*8 + 7)
parseInt("007",10)//77:(7*10 + 7)

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值