显式类型转换
1,Number()
- 基本数据类型
- 数字即本身。
- 字符串,如果是纯数字,则直接转化为数字;如果不是纯数字,则转换为NaN;如果是空字符串,则转化为0;
- 布尔值,true转化为1;false转化为0;
- undefined转化为NaN
- null转化为0
- 引用数据类型
- 先调用对象的valueOf()方法,如果返回的是基本数据类型,则调用Number()方法,结束。
- 先调用对象的valueOf()方法,如果返回的是复合数据类型,则继续调用toString()方法,这时如果返回的是基本数据类型,则调用Number()方法,结束。
- 先调用对象的valueOf()方法,如果返回的是复合数据类型,则继续调用toString()方法,这时如果返回的不是基本数据类型,则报错。
2,String()
- 基本数据类型
- 数字转化为字符串。
- 字符串为本身。
- 布尔值,true转化为'true';false转化为'false';
- undefined 转化为 'undefined';
- null 转化为 'null';
- 引用数据类型
- 先调用对象的toString()方法,如果返回的是基本数据类型,则调用String()方法,结束。
- 先调用对象的toString()方法,如果返回的是复合数据类型,则继续调用对象的valueOf()方法,这时如果返回的是基本数据类型,则调用String()方法,结束。
- 先嗲用对象的toString()方法,如果返回的是复合数据类型,则继续调用对象的valueOf()方法,这时如果返回的不是基本数据类型,则报错。
3,Boolean()
只需记得几项为false的值,其他都为true。
- +0
- -0
- ''
- false
- NaN
- undefined
- null
隐式类型转换
- 四则运算
- 如果是加法和字符串同时出现时,会成为字符串拼接。
- 如果是其他情况的+-*/,则将不是number类型的数据通过Number()转化,转化完成再进行数学运算。
- ==
- 出现不同类型的数据比较,将不是number类型的数据通过Number()转换,再进行判断。
- 特别注意:undefined == null 返回的是true
- 判断语句
- 将所有判断语句内的结果进行Boolean()转化。
- 三目运算符
- 逻辑运算
- &&,将两边的数据进行Boolean()转换,返回从左往右第一个false的值。如果全为true,则返回最后一个值。
- ||,将两边的数据进行Boolean()转换,返回从左往右第一个true的值,如果全为false,则返回最后一个值。
- Native调用
- console.log()会将输入调用String()方法,返回字符串。
- alert()会将输入调用String()方法,返回字符串。
常见题目
- [] + [] //''
- [] + {} //"[object Object]"
- {} + [] //0,这里将{}看成了空代码块,直接无视了,变成+[]
- {} + {} //这里的答案在chrome和firefox中的执行结果不同,firefox会将前面的{}看成空代码块,并无视它成为+{},值为NaN;在chrome中执行,值为"[object Object][object Object]",(具资料显示,chrome用的是eval()方法进行解读的。nodejs环境中值为"[object Object][object Object]")
- true + true //2
- 1 + {a:1} //"1[object Object]"
- undefined == null //true