显式转换
其他数据类型转换成Number
- 将其他数据类型的值转化为数值时,有几种方法?
- Number()
- parseInt()
- parseFloat()
- +/- (一元操作符)
- 说一说上面方法的异同?
它们都是可以将非数值转化为数值,不同点如下:
1. Number() 可以处理Boolean、null、undefined,Object而parseInt不可以
2. 在处理字符串时
- number能处理数字字符串(正负),包括十六进制的数字以及空字符串;
- parseInt是从第一个非空格字符开始解析,直到遇到一个非数字字符串,如果第一个不是数字或者负号,parseInt就会返回NaN
3. parseFloat()与parseInt()类似,+/-与Number()类似
- 规则?
除以下情况外能正常转化为数字,其余全为NaN
1. Boolean值, true--->1 false--->0
2. null--->0
3. 空字符串('')---> 0
4. 数字字符串('123', '1.23', '0xf')---> 123, 1.23, 15
5. 对象则是先调用valueOf方法,看该方法的返回值是否能转化成数字,如果不行则基于这个返回值调用toString方法,再测试改返回值能不能转化成数字
var a = {
valueOf: function() {
return 'xyxy';
},
toString: function() {
return 1;
}
};
Number(a) // NaN
其他数据类型转换成String
- 将其他数据类型的值转化为字符串时,有几种方法?
- 其他数据类型的值.toString()
- String(其它数据类型的值)
- 说一说上面方法的异同?
null与undefined上没有toString()方法
- 规则?
字符串拼接时,加号两边如果出现字符串或者引用类型的值({}、[]、function(){}),都会变成字符串拼接(因为原本应该是把引用类型的值转为数字,但是需要先转为字符串,遇到字符串就直接变成字符串拼接了)
{} => "[object Object]"
function(){} =>"function(){}"
{}+0; //0 没有变成字符串拼接的原因:把{}当做块处理了,不参与数学运算
({}+0); //"[object Object]0" 用括号运算符包起来就是数学运算了
// 做个题目吧
let result =10 + false +undefined+[]+'Tencent'+null+true+{};
//(10+0+NaN)+''+'Tencent' +'null' +'true' + '[object Object]'
//"NaNTencentnulltrue[object Object]"
console.log(result)
其他数据类型转换成Boolean
- 将其他数据类型的值转化为布尔值时,有几种方法?
- ! 转换为布尔类型后取反
- !! 转换为布尔类型
- Boolean
- 规则?
只有 0、NaN、空字符串、undefined、null 五个值会变为false,其余都是true
隐式转换
isNaN、Math方法
参考显式转换成Number的规则
+ 操作
两边的数据有一个是字符串类型则选用字符串拼接操作,
之后才是考虑数学计算的加操作
==
- 「类型一样的几个特殊点」
{} == {} : false 说明:对象(引用类型的值)比较的是堆内存的地址
[] == [] : false 同上
NaN == NaN : false
2.「类型不一样的转换规则」
1. null == undefined : true
2. null、undefined和其他任何值都不相等即 在比较相等性之前,不能将null与undefined转换成其他任何职
3. 字符串 == 对象 要把对象转换为字符串
4. 剩下如果==两边数据类型不一致,都是需要转换为数字再进行比较
5.注意点:
虽然Number(null)的结果是0,但是null和0 ==比较时并不是转为数字比较的,即验证3中所说