数据类型转换
1. 把其他数据类型转换为 Number 类型
1.特定需要转换为Number的
+ Number([val])
+ parseInt/parseFloat([val])
2.隐式转换(浏览器内部默认要先转换为Number在进行计算的)
+ isNaN([val])
+ 数学运算(特殊情况:+在出现字符串的情况下不是数学运算,是字符串拼接)
+ 在==比较的时候,有些值需要转换为数字再进行比较
+ ...
2. 把其它数据类型转换为字符串
1. 能使用的办法
+ toString()
+ String()
2. 隐式转换(一般都是调用其toString)
+ 加号运算的时候,如果某一边出现字符串,则是字符串拼接
+ 把对象转换为数字,需要先toString()转换为字符串,再去转换为数字
+ 基于alert/confirm/prompt/document.write...这些方式输出内容,都是把内容先转换为字符串,然后再输出的
** 拓展:对象在做数学运算的时候 **
-
检测对象的 Symbol.toPrimitive 这个属性值,如果有则基于这个值进行运算,如果没有
-
检测对象的 valueOf() 这个值「原始值:基本类型值」,如果有则基于这个值进行运算,如果不是原始值
-
获取对象的 toString() 把其变为字符串 -> 如果是‘+’处理,则看到字符串了,所以变为字符串拼接
-
如果最后就是想变为数字,则再把字符串转换为数字即可
例如
let n = "10",
m = 10;
console.log(10 + n); // “+”有一边出现了字符串「前提:有两边」会变为字符串拼接 ‘1010’
console.log(+n); // “+”只有一边,把值转换为数字 10
console.log(++n); // “++”和上面一样也是转换为数字,但是还会自身累加一 11
let obj = {};
console.log(10 + obj); //->'10[object Object]'
3. 把其它数据类型转换为布尔
1. 基于以下方式可以把其它数据类型转换为布尔
+ ! 转换为布尔值后取反
+ !! 转换为布尔类型
+ Boolean([val])
2. 隐式转换
+ 在循环或者条件判断中,条件处理的结果就是布尔类型值
规则:只有 ‘0、NaN、null、undefined、空字符串’ 五个值会变为布尔的 FALSE,其余都是 TRUE
4.在==比较的过程中,数据转换的规则:
【类型一样的几个特殊点】
-
{}=={}:false 对象比较的是堆内存的地址
-
[]==[]:false
-
NaN==NaN:false
【类型不一样的转换规则】
-
null==undefined:true,但是换成===结果是 false(因为类型不一致),剩下 null/undefined 和其它任何数据类型值都不相等
-
字符串==对象 要把对象转换为字符串
-
剩下如果==两边数据类型不一致,都是需要转换为数字再进行比较
例如:
let result = 10 + false + undefined + [] + "Tencent" + null + true + {};
console.log(result); //result="NaNTencentnulltrue[object,object]"