一、Boolean转换成false的情况
Number: 0, +0, -0, NaN;
String: 空字符串
Boolean:false
null: null
不成立的等式
注意:
undefined + undefined = NaN;
undefined + 任何 Number类型的数据 = NaN;
undefined + NaN = NaN
undefined + 任意 String 类型的数据 = undefined与字符串拼接成的 String 类型的数据
undefined + '1' = "undefined1"
二、Number转化为0的情况
// 1、基本类型
Number: 0, +0
String:空字符串 ,"0"
Boolean:false
null:null
// 2、复杂数据类型
Array:[],[0],['0']
注意:
Number(undefined) // NaN
三、比较运算符
// == 的比较规则; 规则自上而下执行
(1) NaN 不等于任何值,包括它自身;
(2) null 不等于任何值,除了 null 和 undefined;
(3) undefined 不等于任何值,除了 null 和 undefined;
(4) 如果比较出现 数字类型(Number) 和 布尔类型(Boolean)的数据,都会转换为 Number 类型 进行比较;
(5) 如果比较出现 字符串类型(String)的数据,都会转化为 字符串(String)进行比较;
(6) 如果两个复杂类型的数据进行比较,比较的是地址
四、Number方法转换规则
// Number()
1. undefined NaN
2. null 0
3. 布尔值 true为1, false为0
4. 字符串
(1)空字符串, 为0;
(2)非空字符串,并且内容为纯数字转成对应的数字
(3)其余都是 NaN
5. 数字 原来的数字
6. 对象
(1) 对象、函数 转为NaN
(2) 空数组转为 0,数组里只有一个数据且这个数据能转成数字,则转成对应的数字;其他转成 NaN;
五、String方法转换规则
1. 基本数据类型,null,undefined 的结果就是给数据加上引号变成字符串;
2. 对象
(1)数组的结果为把所有中括号去掉,外面加个引号;
(2)对象的结果为 "[Object Object]";
(3)函数的结果为在函数整体外面加上引号
六、Boolean方法转换规则
1. undefined false
2. null false
3 数字
+0, -0, NaN 转换为布尔值的结果为 false,其它的转布尔值的结果为 true
4. 布尔值 转为对应的值
5. 字符串
空字符串转为布尔值的结果为false, 其它字符串(包括空格字符串)都转换为true
6. 对象转为布尔值都是 true
七、转换对象数据的背后原理
valueOf() 返回对象对应的原始值
toString() 返回对象的字符串表现形式
调用结果
1. 数组
valueOf 数据本身(对象形式)
toString 去掉中括号,外面加个引导
2. 函数
valueOf 数据本身(对象形式)
toString 在数据外面加个引号
3. 对象
valueOf 数据本身(对象形式)
toString "[Object Object]"
// Number 参数为对象的转换原理
1. 调用对象 valueOf 方法,如果返回原始类型的值,再使用 Number 方法,不再进行后续步骤
2. 如果 valueOf 方法返回的还是对象,则调用 toString 方法
3. 如果 toString 方法返回原始类型的值,则对该值使用 Number 方法,不再进行后续步骤
4. 如果 toString 方法后返回的是还是对象,就报错(一般不会出现)
// Stirng 参数为对象的转换原理
1. 调用对象的 toStirng 方法。如果返回原始类型的值,再使用 String 函数,不再进行后续步骤
2. 如果 toString 方法返回的还是对象,再调用对象 valueOf 方法
3. 如果 valueOf 方法返回原始值类型,则对该值使用 String 函数,不再进行以下步骤
4. 如果valueOf 方法返回的还是对象,就报错
// 总结
1. 对象转数字,先调用 valueOf 再调 toString, 所以大部分对象转数字都是 NaN
2. 对象转字符串,一般只会调用 toString.
八、隐式转换的场景
(一) 隐式转数字的场景
1. 数学运算符(+ - * / %), 但是加法运算不能出现字符串或对象;
2. 一元运算 (+ -)正负操作符后面的数据
3. 递增、递减运算符
4. 某些比较运算符
(二) 隐式转字符串的场景
1. 有字符串的加法运算
2. 有对象的加法运算
3. 调用alert、document.write方法
4. 某些比较运算符
(三) 隐式转换布尔值的场景
1. 取反运算
(1)1个感叹号,把这个数据转成布尔值后取它的相反值
(2)2个感叹号,把这个数据转成布尔值
2. 三目运算、逻辑运算符里的表达式结果
3. 条件语句的小括号里的表达式结果