在js中,为什么!0是true,!!0是false,!1是false,!!1是true,!-1是false,!!-1是true
1. ==会把比较的二者进行类型转换:
如:0 == false; // true, 会把0转成bool值进行比较
1 == true; // true, 同样把1转成bool值再和true进行比较
2. ===是不会把比较的二者进行类型转换,是string就是string,是number就是number
如: 0 === false; // false, 因为0是number,false是boolean,两者就肯定不相等
1 === true; // false
但如果
-1==false //false
-1==true //false
负数用==去判断都是false,什么原理? 展开
一、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。
参考资料:
true 和false 和负数比较, 会把 true 隐式转换为1 ,false隐身转换为0。
因为JS规定 :非0的数字是true !,-1 相当于 ! true 肯定是false 。
所以0是true,!!0是false,!1是false,!!1是true,!-1是false,!!-1是true。
Javascript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。Javascript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。
扩展资料:
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的
解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言。最早是HTML(标
准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
参考资料:百度百科-js
所以负数用==去比 是false
!-1是false,!!-1是true 这个原理 因为JS规定 非0的数字是true !-1 相当于 !true 肯定是false !!true == true
你把握隐式转换 和 非0的数是true 就可以解决你的疑惑
2014-05-22
只有0代表false