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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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。

参考资料:

百度百科--比较运算符

参考技术A

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

参考技术B 很简单 true 和false 和负数比较 会把 true 隐式转换为1 false隐身转换为0
所以负数用==去比 是false
!-1是false,!!-1是true 这个原理 因为JS规定 非0的数字是true !-1 相当于 !true 肯定是false !!true == true
你把握隐式转换 和 非0的数是true 就可以解决你的疑惑本回答被提问者采纳
参考技术C

Boolean Variable (布尔型变量) 是有两种逻辑状态的变量,它包含两个值:真(true)和假(false)。
在js中0为false,其它为true。
!是一个布尔操作符,用于将操作的值强制转换为布尔值并取反。

所以!0即先将0转换为Boolean型false再取反为true。
!!0为!0再取反即false。
!-1是将true取反即为false。
!!-1为!-1取反即为true。

参考技术D js是弱数据类型,所有非0的整数都是true
只有0代表false

为啥 false && (false)?false:true 返回 true

【中文标题】为啥 false && (false)?false:true 返回 true【英文标题】:Why does false && (false)?false:true return true为什么 false && (false)?false:true 返回 true 【发布时间】:2013-09-18 05:52:09 【问题描述】:

请不要看情况,因为他们在这里是为了便于理解行为

为什么结果等于真?

boolean result = false && (false)?false:true;

我知道我们可以解决这个问题:

boolean result = false && (false?false:true);

但我只是想知道为什么第一个语法不正确,看起来像“?”运算符的优先级高于 '&&'

【问题讨论】:

【参考方案1】:

三元条件 (?:) 的precedence 低于&&。所以

boolean result = false && (false)?false:true;

(有不必要的括号);相当于

boolean result = (false && false) ? false : true;

因为(因为false && falsefalse),这简化为

boolean result = false ? false : true;

当然是true

【讨论】:

【参考方案2】:
    &&(逻辑与)

描述:- 比较两个表达式,只有当两者都为真时才返回真。如果一个或两个都为 false,则返回 false。

以下列表显示了所有可能的组合:

true && false = false // Evaluates false because the second is false
false && true = false // Evaluates false because the first is false
true && true = true // Evaluates true because both are true
false && false = false// Evaluates false because both are false

语法

表达式1 && 表达式2

Cllick here to know more About Logical AND

    || (逻辑或)

描述:- 比较两个表达式,如果一个或两个都为真,则返回真。仅当两个表达式都为 false 时才返回 false。

以下列表显示了所有可能的组合:

true || false = true // Evaluates true because the first is true
false || true = true // Evaluates true because the second is true
true || true = true // Evaluates true because both are true
false || false = false // Evaluates false because both are false

语法

表达式1 ||表达式2

Click here to know about Logical OR

【讨论】:

您的第一组示例中似乎出现了复制粘贴错误。我认为应该是:false && false // Evaluates false because neither are true 而不是您重复的第二行。【参考方案3】:

false && (false) 计算结果为false,因此返回三元运算符的最后一个值,即true

【讨论】:

【参考方案4】:

因为

boolean result = false && (false)?false:true;

被解释为

boolean result = (false && (false))?false:true;

请参阅:Java operator precedence。在表格中您可以看到&& 的优先级高于? :

【讨论】:

【参考方案5】:

只是一些boolean algegra。

False && false = true
false && true = false
true && true = true
true && false = false

所以在第一种情况下,就像写:

if (false && false)
result = false
 else 
result = true

在你的第二种情况下,就像写:

result = false && (false == false);

并且 false == false 返回 true。所以 false && true 返回 false

【讨论】:

我的问题更多是关于语法而不是布尔代数 @Leviathan56 False && false != true

以上是关于在js中,为啥!0是true,!!0是false,!1是false,!!1是true,!-1是false,!!-1是true的主要内容,如果未能解决你的问题,请参考以下文章

Mysql BOOL 字段应该使用哪些值:TRUE/FALSE 或 1/0,为啥?

js中各种类型的变量在if条件中是true还是false

关于JavaScript中0空字符串'0'是true还是false的总结

为啥在 PHP (-1 > false) 中返回 true? [复制]

MSSQL 中Bit属性的字段表示为0或1但当用在ASP中显示出来的却是true或false而不是0或1,为啥呢?

sqlserver数据库中的字段是bit类型的,数据库中查询查询出来的值为啥是true,o查询不出来