08.JavaScript类型转换——转为字符串、转为数字、转为Boolean

类型转换


章节目录
上一篇:《弹窗》
下一篇:《算术运算符》


《数据类型》章节中已经介绍到,在JavaScript程序中,任何一个变量都会归属于一种数据类型。

不同的数据类型具有不同的用途,例如,屏幕输出就需要使用String类型,公式计算就需要Number类型,很多情况下,我们需要的数据类型和当前数据的类型往往是不匹配的。

例如,《JavaScript弹窗》中,我们使用prompt函数获得的用户输入年龄本质上是个数字,但其实我们得到的是个字符串。

let age = prompt('age'); // 用户输入的数字
typeof age;              // 得到的age类型是'string'

在这种情况下,如果我们需要比较年龄的大小,就需要将字符串转换为数字。

幸运的是,大多数情况下运算符和函数会自动的将值转换为正确的类型,无需我们劳心费力,我们称这种转换方式为隐式转换

隐式转换

隐式转换几乎存在于编程的角角落落,只是我们不小心忽略了它们的存在。

转字符串

我们最熟悉的函数alert用于展示各种消息,而这些消息都是以字符串的形式展现的,也就是说不论我们输入什么类型的数值,最终都会变成字符串输出到屏幕:

alert(18);          //输出数字
alert('str');       //字符串
alert(true);        //boolean
alert(null);        //null
alert(undefined);   //undefined
alert({});          //[object Object]

这种隐式转换在编程过程中是非常有用的,如果不使用隐式转换,那么就需要程序员手动的控制所有数据的类型,这无疑是痛苦的。

alert函数对类型的转换在object类型上尤为明显,由于object类型结构复杂,alert会统一将其转成[object Object]

转数字

在计算过程中,需要使用数字。而我们从用户、文件中获取的输入往往都是字符串,参与计算之前都需要先将字符串转换成数字。

一定情况下,JavaScript会将字符串默认的转为数字参与计算:

alert(9 * '6')      //54
alert('6' * '6')    //36
alert('7' * 8)      //56
alert('6' / 2)      //3
alert(9 / '3')      //3
alert('18' / 9)     //2
alert(1 - '1')      //0
alert('1' - 2)      //-1
alert('2' - '1')    //1
alert(9 / 'xx')     //NaN
alert(1 + true)     //2
alert(2 - true)     //1
alert(3 * true)     //3
alert(8 / true)     //8
alert(1 / false)    //Infinity
alert(1 * false)    //0
alert(1 - false)    //1
alert(1 + false)    //1    

虽然我们直接使用了字符串参与计算,但得到的结果和数字直接计算毫无差别。
特殊的是,Boolean也可以直接参与数学运算,其中true被当作1false被当作0

既然隐式转换如此智能,是不是说我们就可以高枕无忧了呢?并不是

例如:

alert(1 + "1") //"11"
alert("2" + 1) //"22"

以上计算在数学中显然是错误的,产生错误的原因在于字符串类型本身就有+运算,也就是字符串拼接运算。

到这里,基本上我们就能总结隐式转换发送的情形:

  • 如果数据类型本身能够直接计算,就直接计算并返回结果
  • 如果数据类型本身不能直接计算,就转换类型后再计算
  • 如果数据类型转换后还是不能计算,返回NaN

显式转换

对于隐式转换无法解决的问题,我们就需要使用显式转换主动的修改数据类型,修改数据类型有三个方法:Number()String()Boolean().

Number()

Number()函数会尝试将非数字类型的值转换为数字类型,语法如下:

let num = Number(value);

举个栗子:

let num = Number('124');
typeof num; //'number'

以上示例常用于将用户输入的内容转换为数字:

let ageStr = prompt('请输入年龄?');
let ageNum = Number(ageStr);
typeof ageNum; // number

当然,如果输入的字符串并非数字字符串,那么转换就会失败,函数返回NaN:

let str = 'xyz';
let num = Number(str);
alert(num); // NaN

Number转换规则

原始值转换值
NumberNumber
undefinedNaN
null0
true1
false0
string去首位空格后转为数字,不成功返回NaN,空串返回0

再举个李子:

alert(Number('   996'));//996
alert(Number('xxx'));   //NaN
alert(Number(true))     //1

String()

String()函数能够将其他类型的值显式的转成字符串类型,再转换过程中,不会出现值样式的改变,即false变为"false",null变为"null"。

Boolean()

Boolean()类型转换则更为简单:

  1. 直观上为“空”的值,如0""nullundefinedNaN都将变为false;
  2. 其他值变为true

举个例子:

Boolean(1)//true
Boolean("")//false
Boolean("x")//true
Boolean('0')//true

你学废了吗?再来一节吧!!


章节目录
上一篇:《弹窗》
下一篇:《算术运算符》


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@魏大大

我们都没有打赏的习惯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值