在我们使用java scrpit时,有时会使用 1=="1"或者类型的判断,这个时候两边都不是一个类型,理论上应该报错,但实际上并不会,浏览器会判定这个为true,这个问题的原因就在于隐式转换。
隐式转换是什么东西,首先我们分析一下这个词,转换是实际操作,隐式是形容这个过程,也就是说,是在我们不知道的内部进行了转换,这么一说就理解了,在1=="1"这个例子中,浏览器自动把两个类型转换成同一个类型然后进行判断,这就是隐式转换,
那么问题来了,隐式转换是如何转换的呢,是从什么类型转换到什么类型?
1、1=="1",把"1"转换成数字型1然后进行比较,故判定结果为true;
2、1=="一",把“一”转换成数字型,即为NaN,NaN是一个不可知不确实的数字,故判定结果为false;
对于运算符来说,浏览器会自动把类型转换成数字型,也就是Number型;
对象转换成字符串,字符串转换成数组,布尔值直接转换成数值,数组与对象一样。
第二种转换是+,这是拼接符,不是运算符,用于1+“1”,这个例子中会把数字型1转换成字符串“1”然后与别一个字符串拼接进来;
对象/数组转换成字符串,布尔值转换成数字型再转换成字符串。
第三种是逻辑运算符非,也就是!
转换顺序是对象/数组转换字符,字符转换数字,数字转换布尔值。