这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
类型转换(1)
01. 转换为布尔值
(1)显示转换
-
概念:通过
Boolean()转型函数,可以在任意类型的数据上调用;通过取反操作! -
规则:
- 除了
undefined,null,false,NaN,'',0,-0这些值会被转换为false,其他所有值都会被转为true,包括所有对象
console.log(!1); // false // 用两个取反符 console.log(!!1); // true consolelog(Boolean([])); // true console.log(![]); // false - 除了
(2)隐式转换
-
概念:在条件语句中,会自动执行其它类型值到布尔值的转换,即条件判断的结果是布尔值
console.log(1 == 1); // true if (1 + 'x') {} // 等价于: 1x,所以条件为 true if (1 - 'x') {} // 等价于:NaN,所以条件为 false
02. 转换为数值类型
(1)显示转换
- 概念:通过
Number()、parseInt()、parseFloat()函数可以将非数值转换为数值类型,但他们有不一样的转换规则
Number()
-
Number()可以把其他数据类型强制转换为数字类型 -
规则:
-
对于布尔值:
Number(true) == 1、Number(false) == 0 -
对于null和undefined:
Number(null) == 0、Number(undefined) == NaN -
对于字符串:
// 1. 空字符串:0 Number(''); // 0 // 2. 只有 数值字符串 才能转 // 数字前可以有 +、- 符号,但只能有一个 Number('+1') // 1 Number('-1') // -1 Number('++1') // NaN // 可以是浮点数,但只能有一个小数点 Number('1.1') // 1.1 // 可以是十六进制,但必须以 0x 开头 Number('0x123') // 291 // 去除前后空格后,只要 包含字符,就返回NaN:NaN Number('str123') // NaN -
对于Symbol:不能把Symbol类型转换为数字类型,否则报错
-
对于对象:会先转换为字符串,再转换为数字
-
对于数组:只有空数组, 单数字数组才可以转换
Number([]); // 0 Number(['10']); // 10 // 其它情况均返回 NaN Number(['1','2']) // NaN -
对于函数:
Number(function(){}) == NaN
-
parseInt() 和 parseFloat()
-
概念:两者都适用于对字符串的转换,使用
parseInt()将字符串转换为整数类型的数值,使用parseFloat()将字符串转换为浮点类型的数值 -
规则:
- 从第一个非空格字符开始转换
- 如果第一个字符是数字,则可以进行转换,直到检测到其它字符,则结束
- 特别的:
+、-符号也是有效的,它可以看作是数字的符号,如-1、+2 - 同样的:对于八进制、十六进制的字符串也是可以是别的
- 而对于
parseFloat,遇到第一个小数点.是有效的
- 特别的:
- 如果第一个字符是非数值字符、加号、减号,则返回
NaN
// 第一个非空字符为 字符,无法转换 parseInt('str00123.23') // NaN // 第一个非空字符为 数字,可以转换 parseInt(' 12.234.123') // 12 parseFloat(' 12.234.123') // 12.234 parseInt('+123asdasd') // 123 // 十六进制 parseInt('0x123') // 291
(2)隐式转换
-
概念:在数学运算中,可以将其它类型的数据隐式转换为数字类型
-
通过运算符:
-、*、/ -
通过添加符号:
+、--
会默认调用
ToNumber方法
仅适用于数字字符串,如果包含其他字符则返回
NaN -
let num = '123' console.log(+num) // 123 console.log(-num) // -123,添加 '-' 会取反 // 可再在前面添加一个 '-',注意要加括号,如果不加括号,就会变为 num 自减(虽然也可以转为数字) console.log(--num) // 122 console.log(-(-num)) // 123 -
-
一道题:
{} + []、[] + {}console.log({} + []) // 0 console.log([] + {}) // '[object Object]'分析:
- 第一道:
{}会被认为是一个代码块,于是{}里面没有内容,就直接忽略了- 然后直接执行
+[],结果为:+[] == +'' == 0
- 然后直接执行
- 第二道:就是正常的转换为字符串进行运算
[]转换为''{}转换为[object Object]
- 第一道:
(3)其它的
-
关于
0.1+0.2 !== 0.3的问题-
原因:计算机室通过二进制的方式存储、计算的,所有在进行计算时,会将0.1和0.2转换为二进制进行计算,但这两个数的二进制都是无线循环的数
-
解决办法
function numbersEqual(a, b) { return Math.abs(a, b) < Number.EPSILON }
-
-
保留
N位小数:.toFixed(N)- 注意,保留后的结果是一个字符串
03. 转换为字符串类型
(1)显示转换
- 概念:通过内置的方法进行转换
.toString()方法- 可用于数值、字符串值、布尔值、对象
- 但不可用于
null、undefined
String()转型函数- 可以返回相应类型值的字符串
- 规则:
- 如果值有
toString()方法,则调用该方法并返回结果 - 如果值为
null,则返回null - 如果值为
undefined,则返回undefined
- 如果值有
(2)隐式转换:
-
概念:在拼接字符串时,其中有一方是字符串,则另一方会被隐式转换为字符串
console.log('123' + 123) // 123123
(3)拓展
-
拼接字符串——模板字符串
${}+反引号console.log(`my name is ${name}`)
本人前端小菜鸡,如有不对请谅解