为什么js的==能自动转换类型呢

JavaScript01

为什么js的==能自动转换类型呢,第1张

这里有个js的概念: 隐式类型转换。 当你使用比较运算符时,js会进行隐式类型转换。

如果你又问,为什么会隐式类型转换呢,那我只能回答:这是js语言本身的特性,内部约定的。

隐式类型转换是遵循一定原则的

1. 两个数字比较时是不存在隐式类型转换的

2. 数字和非数字比较时,会将非数字的一方隐式转换成数字,然后进行比较。

3. 两个字符串进行比较时, 会将其第一个字母转成对应的ASCII,然后进行比较, 比如 'a' >'b', 会先将a 和 b 分别转换为其ASCII值: 97, 98, 因为 97 小于98,所以 'a' >'b' 为 false。

4. 两个boolean 类型比较时,true会被转换成1,false 会被转换为 0。

5. 两个对象进行比较时,会先调用其 valueOf方法,然后再进行比较。

基本就这些了,更多这方面的知识,需要你自己去加深了解了。

可以通过以下3种方法来将string值转换成number:1.调用Number()来对string进行值类型转换。2.parseInt()。3.parseFloat()。Number()使用Number()函数来对string进行强制类型转换是最直接的做法。不过,这种做法有一个局限性:如果字符串截去开头和结尾的空白字符后,不是纯数字字符串,那么最终返回结果为NaN。代码如下:var a = " 42"var b = " 42mm"var c = "0xff"var d = "42.34"console.log(Number(a))//42console.log(Number(b))//NaNconsole.log(Number(c))//255console.log(Number(d))//42.34parseInt()

== 判断规则:

如果两个值类型相同,进行 === 比较。

如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:

如果一个是null、一个是undefined,那么[相等]。

如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。

如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。

果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心

内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,令说(比较麻烦,我也

不大懂)

任何其他组合,都[不相等]。

特别需要注意的是true、false的转换,例如:

alert(true == 1) //ture

alert(true == 2)//false, true会转换成number,也就是1,当然 1 不等于 2

//可以使用 !! 来把一个数据类型转换为boolean型

alert(true == !!2) //true,!2 === false !(!=2) = !false = true

另外在js中,如果把一个变量用在逻辑运算中,那么变量在无初始值或者其值为 0、-0、null、”"、false、undefined 或者 NaN时,它的值为 false。否则,其值为 true。