在js中,为什么!0是true,!!0是false,!1是false,!!1是true,!-1是false,!!-1是true

JavaScript010

在js中,为什么!0是true,!!0是false,!1是false,!!1是true,!-1是false,!!-1是true,第1张

一、js中的数字0就是false,非0为true,!表示取反。所以:!0--false取反--true;!!0--false双重取反--false;!1--true取反--false;!!1--双重取反--true;!-1--true取反--false!!-1--true双重取反--true。二、==和===:==:先检查两个操作数数据类型,如果相同,则进行===比较,如果不同,则愿意为你进行一次类型转换,转换成相同类型后再进行比较;===:如果类型不同,直接就是false。具体比较过程:1、双等号==: (1)如果两个值类型相同,再进行三个等号(===)的比较。(2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:如果一个是null,一个是undefined,那么相等。如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较。2、 三等号===:(1)如果类型不同,就一定不相等。(2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN()来判断)。(3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。如果两个值都是true,或是false,那么相等。如果两个值都引用同一个对象或是函数,那么相等,否则不相等。如果两个值都是null,或是undefined,那么相等。扩展资料:在js做比较的时候,有这样的三条规则:1、如果比较的两者中有bool,会把bool先转换为对应的number,即0和1。2、如果比较的双方中有一方为number一方为string,会把string转换为数字。3、把string直接转换为bool的时候,空字符串‘'转换为false,除此外的一字符串转换为true。参考资料:百度百科--比较运算符

这里有个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方法,然后再进行比较。

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