显式类型转换
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。node
- +0
- -0
- ''
- false
- NaN
- undefined
- null
隐式类型转换
- 若是是加法和字符串同时出现时,会成为字符串拼接。
- 若是是其余状况的+-*/,则将不是number类型的数据经过Number()转化,转化完成再进行数学运算。
- 出现不一样类型的数据比较,将不是number类型的数据经过Number()转换,再进行判断。
- 特别注意:undefined == null 返回的是true
- 将全部判断语句内的结果进行Boolean()转化。
- 三目运算符
- &&,将两边的数据进行Boolean()转换,返回从左往右第一个false的值。若是全为true,则返回最后一个值。
- ||,将两边的数据进行Boolean()转换,返回从左往右第一个true的值,若是全为false,则返回最后一个值。
- 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