一、数据类型的转换
js是一种松散型语言,js的数据类型由5种基本数据类型和1种引用类型组成,各种数据类型在一定程度上可以进行转换,下面贴上各个类型间强制转换的结果。
1、其他数据类型向Number的转换
1 Number(1) //1 2 Number(NaN) //NaN 3 Number(true) //1 4 Number(false) //0 5 Number(undefined) //NaN 6 Number(null) //0 7 Number({}) //NaN 8 Number({a:1}) //NaN 9 Number([]) //0 10 Number([1,2,3]) //NaN 11 Number("1") //1 12 Number("1.1") //1.1 13 Number("1a") //NaN 14 Number("a1") //NaN 15 Number("0xf") //15 16 Number("031") //31 17 Number("") //0
2、其他数据类型向String的转换
1 String(1) //1 2 String(NaN) //NaN 3 String(true) //true 4 String(false) //false 5 String(undefined) //undefined 6 String(null) /null 7 String({}) //[Object Object] 8 String({a:1}) //[Object Object] 9 String([]) //"" 10 String([1,2,3]) //1,2,3 11
3、其他类型向Boolean的转换
1 Boolean(1) //true 2 Boolean(-1) //true 3 Boolean(0) //false 4 Boolean(NaN) //false 5 Boolean("") //false 6 Boolean("0") //true 7 Boolean(undefined) //false 8 Boolean(null) //false 9 Boolean({}) //true 10 Boolean({a:1}) //true 11 Boolean([]) //true 12 Boolean([1,2,3]) //truer
二、==和等===的理解
==在比较两者是否相等时,会把两边的操作数转换成相同的数据类型然后再进行比较。那具体操作数是转换成什么数据类型呢,下面有一个规则:
1、如果一个值是null,另一个是undefined,则相等。
2、如果一个是数值,一个是字符串,则把字符串转成数值再进行比较。
3、如果一个是true,则把true转为0,同理把false 转为0再进行比较。
4、如果一个值是对象,另一个是数字或字符串,则将对象转换成原始值再进行比较(日期对象转换成字符串,其它对象先尝试调用valueOf()方法再尝试使用toString())
5、其他不同类型的转换都不相等。
6、NaN==NaN false
===不仅要值相等,还需要类型相等才会相等。有两个特殊的情况,一是NaN===NaN为false,+0===-0为true。
为了避免这两种情况,es6引进了Object.is()方法,使得Object.is(NaN,NaN)为true, Object.is(-0,+0)为false。