Webcourse/04-JavaScript基础/03-typeof和变量的强制类型转换.md
2019-12-06 21:19:48 +08:00

7.2 KiB
Raw Blame History

前言

强制类型转换:将一个数据类型强制转换为其他的数据类型。

类型转换主要指将指定的数据类型转换为String、Number、Boolean。你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。

typeof 运算符

我们先来讲一下 typeof再讲类型转换。

typeof()表示“获取变量的类型”,返回的是小写,语法为:

typeof 变量

返回结果

typeof 的代码写法 返回结果
typeof 数值 number
typeof 字符串 string
typeof 布尔型 boolean
typeof 对象 object
typeof 方法 function
typeof null object
typeof undefined undefined

备注1在JavaScript中只要是数就是 number 数值型的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是 number 类型的。

备注2为啥 typeof null的返回值也是 objcet呢这个

返回结果举例

typeof 的代码写法 返回结果 备注
typeof [] object 空数组
typeof {} object 空对象

备注:这里的空数组[]、空对象{} ,为啥他们在使用 typeof 时,返回值也是 object呢?因为这里的 object指的是引用数据类型,是 Object 对象。

其他的简单类型 --> String

方法一:变量+"" 或者 变量+"abc"

举例如下:

var a = 123;  // Number 类型
console.log(a + '');  // 转换成 String 类型
console.log(a + 'haha');  // 转换成 String 类型

上面的例子中,打印的结果,都是字符串类型的数据。

方法二调用toString()方法

举例如下:

变量.toString()

【重要】该方法不会影响到原变量,它会将转换的结果返回。当然我们还可以直接写成a = a.toString(),这样的话,就是直接修改原变量。

注意null和undefined这两个值没有toString()方法,所以它们不能用方法二。如果调用,会报错。

另外Number类型的变量在调用toString()时可以在方法中传递一个整数作为参数。此时它将会把数字转换为指定的进制如果不指定则默认转换为10进制。例如

        var a = 255;

        //对于Number调用toString()时可以在方法中传递一个整数作为参数
        //此时它将会把数字转换为指定的进制,如果不指定则默认转换为10进制
        a = a.toString(2);

        console.log(a);        // 11111111
        console.log(typeof a); // string

方法三使用String()函数

格式如下:

String(变量)

使用String()函数做强制类型转换时:

  • 对于Number和Boolean而言实际上就是调用toString()方法。

  • 但是对于null和undefined就不会调用toString()方法。它会将 null 直接转换为 "null"。将 undefined 直接转换为 "undefined"。

prompt():用户的输入

我们在JS基础的第一篇里就讲过prompt()就是专门用来弹出能够让用户输入的对话框。重要的是:用户不管输入什么,都是字符串。

其他的数据类型 --> Number

方式一使用Number()函数

情况一:字符串 --> 数字

  • 1.如果字符串中是纯数字,则直接将其转换为数字。

  • 2.如果字符串中有非数字的内容则转换为NaN。此处可以看到Number()函数的局限性)

  • 3.如果字符串是一个空串或者是一个全是空格的字符串则转换为0。

情况二:布尔 --> 数字

  • true 转成 1

  • false 转成 0

情况三null --> 数字

  • 结果为0

情况四undefined --> 数字

  • 结果为NaN

方式二:parseInt():字符串 -> 整数【重要】

parseInt()是专门用来对付字符串的。

parseInt()的作用是将字符串中的有效的整数内容转为数字。parse表示“转换”Int表示“整数”注意Int的拼写)。例如:

	parseInt("5");

得到的结果是数字5。

parseInt()还具有以下特性

1只保留字符串最开头的数字,后面的中文自动消失。例如:

    console.log(parseInt("2017在公众号上写了6篇文章"));  //打印结果2017

    console.log(parseInt("2017.01在公众号上写了6篇文章"));  //打印结果仍是2017   (说明只会取整数)

    console.log(parseInt("aaa2017.01在公众号上写了6篇文章"));  //打印结果NaN

2自动带有截断小数的功能取整,不四舍五入

例1

	var a = parseInt(5.8) + parseInt(4.7);
	console.log(a);

控制台输出:

	9

例2

	var a = parseInt(5.8 + 4.7);
	console.log(a);

控制台输出:

	10

3如果对非String使用parseInt()或parseFloat(),它会先将其转换为String然后再操作。

比如:

    var a = true;
    console.log(parseInt(a));  //打印结果NaN 因为是先将a转为字符串"true",然后然后再操作)

    var b = null;
    console.log(parseInt(b));  //打印结果NaN  因为是先将b转为字符串"null",然后然后再操作)

    var c = undefined;
    console.log(parseInt(c));  //打印结果NaN  因为是先将b转为字符串"undefined",然后然后再操作)

    var d = 168.23;
    console.log(parseInt(d));  //打印结果168  因为是先将c转为字符串"168.23",然后然后再操作)

4带两个参数时表示进制转换。

parseFloat():字符串 --> 浮点数(小数)

parseFloat()是专门用来对付字符串的。

parseFloat()的作用是:将字符串转换为浮点数

parseFloat()和parseInt()的作用类似不同的是parseFloat()可以获得有效的小数部分。

代码举例:

    var a = '123.456.789px';
    console.log(parseFloat(a)); // 打印结果123.456

转换为 Boolean

将其他的数据类型转换为Boolean可以使用Boolean()函数。

  • 情况一:数字 --> 布尔。除了0和NaN其余的都是true。

  • 情况二:字符串 ---> 布尔。除了空串其余的都是true。

  • 情况三null和undefined都会转换为false。

  • 情况四对象也会转换为true。

PS转换为 Boolean 的这几种情况,很重要,开发中会经常用到。

其他进制的数字

  • 16进制的数字0x开头

  • 8进制的数字0开头

  • 2进制的数字0b开头不是所有的浏览器都支持chrome和火狐支持IE不支持

比如070这个字符串如果我调用parseInt()转成数字时有些浏览器会当成8进制解析有些会当成10进制解析。

所以比较建议的做法是可以在parseInt()中传递第二个参数,来指定数字的进制。例如:

	a = "070";

	a = parseInt(a,10); //转换成十进制

我的公众号

想学习代码之外的技能?不妨关注我的微信公众号:千古壹号idqianguyihao)。

扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外: