强制转换
所谓强制转换就是使用Number()、String()、Boolean等方法举行强制转换
- console.log(Number('886')); // 886
- console.log(Number('ui886')); // NaN
- console.log(String(123456)); // '123456'
- console.log(String(false)); // 'false'
- console.log(Boolean(1)); // true
- console.log(Boolean('false')); // true
复制代码 引用数据范例的转换过程
这三种方法都有各自的转换过程
- Number()
在对于引用数据范例时,会举行两部操纵
先辈行valueOf()方法,若还无法直接转换,则再执行toString()方法,此时若还无法得到可以转换为数值的值则返回NaN
如下:
- const a = {
- m: 'abc'
- };
- console.log(Number(a)); // NaN
复制代码 让我们改写这两个方法
- const a = {
- m: 'abc',
- valueOf() {
- return 3;
- },
- toString() {
- return 5;
- }
- };
- console.log(Number(a)); // 3
复制代码 可以看到再执行valueOf方法时已得到了须要的number数据范例的值,以是直接返回了,会跳过toString的执行
- const a = {
- m: 'abc',
- toString() {
- return 5;
- }
- };
- console.log(Number(a)); // 5
复制代码 当valueOf方法也无法得到数值范例数据,才会执行toString方法
- String()
与Number()类似,但是转换引用数据范例是先执行toString方法再执行valueOf方法,最后还是引用数据范例就会返回'[object Object]'
如下:
- const a = {
- m: {}
- };
- console.log(String(a)); // '[object Object]'
复制代码 以下代码可以看出,先执行的是toString方法
- const a = {
- m: {},
- valueOf() {
- return 'ww';
- },
- toString() {
- return 'aa';
- }
- };
- console.log(String(a)); // 'aa'
复制代码
- Boolean()
它的转换规则相对简单:除了以下五个值的转换结果为false,其他的值全部为true。
- undefined
- null
- 0(包含-0和+0)
- NaN
- ''(空字符串)
自动转换
js本身是弱范例的语言,赋值时可以是任意数据范例,以是经常会出现不同数据范例的数据举行运算的情况
自动转字符串
- console.log('123' + 123); // '123123'
- console.log('123' + true); // '123true'
复制代码 使用加号运算时,存在字符串时会变成字符串拼接,其他范例的数据就会自动转为字符串数据范例,而如果其他的数据范例为引用数据范例是,就会强制转换,即使用String()
- console.log('123' + {}); // '123[object Object]'
- console.log('123' + []); // '123'
- console.log('123' + [1, 2, 3]); // '1231,2,3'
复制代码 数组与对象不同,当数值只有一个值或空数组时,强制转换会变为谁人值的字符串或空字符串,若有多个值时,逗号也会加入转换
自动转数值
除了加法运算符,其他运算符基本都会把其他数据自动转换为数值范例
- console.log('123' - '12'); // 111
- console.log(true * '12'); // 12
- console.log('45' / 5); // 9
- console.log('2' ** 2); // 4
复制代码 注意: null转为数值时为0,而undefined转为数值时为NaN。
NaN与任何数值运算都为NaN
碰到转换不了的结果就会是NaN
- console.log('abc123' - '12'); // NaN
- console.log(+'aaa'); // NaN
- console.log(-null); // -0
复制代码 自动转布尔值
JavaScript 碰到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean()函数。
因此除了以下五个值,其他都是自动转为true。
- undefined
- null
- +0或-0
- NaN
- ''(空字符串)
总结
js的数据范例转换分为两种,强制转换与自动转换
- 自动转换
- 当不同数据范例之间举行相互运算,或者当对非布尔范例的数据求布尔值的时间,会发生隐性转换。
- 预期为数字的时间:算术运算的时间,我们的结果和运算的数都是数字,数据会转换为数字来举行计算。
- 预期为字符串的时间:如果有一个操纵数为字符串时,使用+符号做相加运算时,会自动转换为字符串。
- 预期为布尔的时间:前面在先容布尔范例时所提到的 9 个值会转为 false,别的转为 true
- 强制转换
- 强制将一种范例转换为别的一种范例。强制转换往往会使用到一些转换方法。常见的转换方法如下:
- 转换为数值范例:Number(),parseInt(),parseFloat()
- 转换为布尔范例:Boolean()
- 转换为字符串范例:toString(),String()
固然,除了使用上面的转换方法,我们也可以通过一些快捷方式来举行数据范例的强制转换,如下:
- 转换字符串:直接和一个空字符串拼接,例如:a = "" + 数据
- 转换布尔:!!数据范例,例如:!!"Hello"
- 转换数值:数据*1 或 /1,例如:"Hello * 1"
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |