首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Javascript中,当使用if语句用三个等号比较零和非false时,为什么false不等于false?

在JavaScript中,=== 是严格相等运算符,它比较两个值是否完全相同,包括它们的类型。而 == 是抽象相等运算符,它在比较之前会进行类型转换。

当使用 === 来比较 0false 时,它们不相等的原因在于它们的类型不同。0 是一个数字类型,而 false 是一个布尔类型。即使它们在某些情况下可能表示相同的概念(例如,逻辑上 0false 都表示“假”),但它们的类型不同,因此严格相等运算符会认为它们不相等。

以下是一些示例代码来说明这一点:

代码语言:txt
复制
console.log(0 === false); // 输出: false
console.log(0 == false);  // 输出: true

为什么 false 不等于 false

这个问题实际上是一个误解。false 当然等于 false,因为它们是完全相同的布尔值。以下是正确的比较:

代码语言:txt
复制
console.log(false === false); // 输出: true

解决方法

如果你想要比较两个值是否在逻辑上相等(即忽略类型),可以使用 == 运算符:

代码语言:txt
复制
console.log(0 == false); // 输出: true

但通常建议使用 === 来避免类型转换带来的意外结果,特别是在复杂的代码中。

应用场景

  • 严格相等 (===):当你需要确保两个值不仅值相同,而且类型也相同时使用。
  • 抽象相等 (==):当你希望在比较之前进行类型转换时使用,但要注意这可能会引入一些难以发现的bug。

总结

  • 0 === false 返回 false 是因为它们的类型不同。
  • false === false 返回 true 是因为它们是完全相同的布尔值。
  • 使用 === 可以避免类型转换带来的问题,通常更安全。

希望这能帮助你理解为什么在JavaScript中使用严格相等运算符时 0false 不相等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript 中的4种相等算法

ECMAScript 是 JavaScript 的语言规范,在ECMAScript 规范[1]中存在四种相等算法,如下图所示: 上图中四种算法对应的中文名字如下,大部分前端应该熟悉严格相等和非严格相等...• 同值 • 同值零 • 非严格相等 • 严格相等 非严格相等 非严格相等使用两个等号,也就是我们熟悉的双等,非严格相等表示语义相等,不要求类型一样,非严格相等在比较前会先将比较参数类型转换为一致,再进行比较...• 和 Boolean 比较时,另一个值会转换为 Number 如果值为对象,会使用内部的 ToPrimitive 转换,可以通过自定义 Symbol.toPrimitive 改变返回值,需要注意的是在相等的判断中...严格相等 严格相等是另一种比较算法,其和非严格相等的区别是不会进行类型转换,类型不一致时直接返回 false,严格相等对应===操作符,因为使用三个等号,也被称作三等或者全等,严格相等示例如下: 1 =...,规范中叫做 SameValueZero,同值零和严格相等功能一样,除了处理 NaN 的方式,同值零认为 NaN 和 NaN 相等,这在判断 NaN 是否在集合中的语义下是非常合理的。

45720

JavaWeb02-CSS,JS(Java真正的全栈开发)

,然后比较大小 字符串和数字比较:字符串无法转成数字,字符串将转成NaN,最终结果为false 等性运算符 在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true...非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。 规则: 值 null 和 undefined 相等。...在检查相等性时,不能把 null 和 undefined 转换成其他值。 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。...("5" == 5) 全等号和非全等号 两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。...== iNum);//输出 "true" 条件运算符(三目运算符) 和java中相同 赋值运算符 = += -= *= /=等和java中相同 逗号运算符 用逗号运算符可以在一条语句中执行多个运算

2.6K150
  • 1.2w字 | 初中级前端 JavaScript 自测清单 - 1

    常见比较 在 JS 中的值的比较与数学很类型: 大于/小于/大于等于/小于等于: a>b / a=b / a使用 ==,非严格等于,不关心值类型 // == 运算符会对比较的操作数做隐式类型转换...,再比较 '1' == 1; // true // 使用 ===,严格相等,关心值类型 // 将数字值 -0 和 +0 视为相等,并认为 Number.NaN 不等于 NaN。...十、条件运算符:if 和 '?' 1. if 语句 当 if 语句当条件表达式,会将表达式转换为布尔值,当为 truthy 时执行里面代码。...如果要显式地将它们的返回值(或者表达式)转换为布尔值,请使用双重非运算符(即!!)或者Boolean构造函数。 JavaScript 里有三个逻辑运算符:||(或),&&(与),!(非)。 2....for 语句用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔,后跟一个用于在循环中执行的语句(通常是一个块语句)。

    1.2K00

    【JS】646- 1.2w字 | 初中级前端 JavaScript 自测清单 - 1

    常见比较 在 JS 中的值的比较与数学很类型: 大于/小于/大于等于/小于等于:a>b / a=b / a<=b ; 判断相等: // 使用 ==,非严格等于,不关心值类型 // == 运算符会对比较的操作数做隐式类型转换...,再比较 '1' == 1; // true // 使用 ===,严格相等,关心值类型 // 将数字值 -0 和 +0 视为相等,并认为 Number.NaN 不等于 NaN。...十、条件运算符:if 和 '?' 1. if 语句 当 if 语句当条件表达式,会将表达式转换为布尔值,当为 truthy 时执行里面代码。...如果要显式地将它们的返回值(或者表达式)转换为布尔值,请使用双重非运算符(即!!)或者Boolean构造函数。JavaScript 里有三个逻辑运算符:||(或),&&(与),!(非)。 2....for 语句用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔,后跟一个用于在循环中执行的语句(通常是一个块语句)。

    1.6K50

    js中==和===有什么不同之处

    javaScript具有严格和类型转换相等比较。 对于严格相等比较符,要求比较的对象必须具有相同的类型,并且: 两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时严格相等。...两个数字在数值上相等(具有相同的数值)时严格相等。 NaN不等于任何东西,包括NaN。 正负零彼此相等。 如果两个布尔操作数都为真或两者都为假,则它们严格相等。...Null和Undefined类型==正确(但使用===时不正确)。...[即 (Null == Undefined)为true但是(Null === Undefined)为false] 简单来说: == 代表相同, ===代表严格相同, 为啥这么说呢,  这么理解: 当进行双等号比较时候...操作数1 == 操作数2,  操作数1 === 操作数2 比较过程:   双等号==:    (1)如果两个值类型相同,再进行三个等号(===)的比较   (2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较

    2K30

    大话 JavaScript(Speaking JavaScript):第六章到第十章

    三个等号(===)用于比较两个值(参见相等运算符)。 注释 有两种注释: 通过//进行单行注释,延伸到行的其余部分。...因此,您的代码看起来更一致,并且在单语句和多于一条语句之间切换更容易。 使用分号的规则 在本节中,我们将讨论 JavaScript 中分号的使用。基本规则是: 通常,语句以分号终止。...不要忘记您可以将单个严格模式函数添加到处于松散模式的文件中的选项。 小心处理包 当您连接和/或缩小文件时,您必须小心,严格模式在应该打开时没有关闭,或者反之亦然。两者都可能破坏代码。...始终使用严格相等,避免宽松相等。只有在您想知道为什么应该避免它时,才需要了解后者。 相等是不可定制的。JavaScript 中的运算符不能被重载,也不能定制相等的工作方式。...用例:比较包装实例和原始值 宽松相等允许你比较原始值和包装原始值: > 'abc' == new String('abc') true 有三个理由反对这种方法。

    31110

    JavaScript强化教程——使用误区

    本文为 H5EDU 机构官方 HTML5教程,主要介绍:JavaScript强化教程 —— 使用误区 JavaScript使用误区 本章节我们将讨论 JavaScript的使用误区。...赋值运算符应用错误 在 JavaScript程序中如果你在 if 条件语句中使用赋值运算符的等号 (=) 将会产生一个错误结果, 正确的方法是使用比较运算符的两个等号 (==)。...if 条件语句返回 false (是我们预期的)因为 x 不等于 10: var x = 0; if (x == 10) if 条件语句返回 true (不是我们预期的)因为条件语句执行为 x 赋值 10...比较运算符常见错误 在常规的比较中,数据类型是被忽略的,以下 if 条件语句返回 true: var x = 10; var y = "10"; if (x == y) 在严格的比较运算中,=== 为恒等计算符...JavaScript的加法和连接都使用 + 运算符。

    67960

    如何处理 JavaScript 比较中的临界情况

    文档 中的规则。在以上代码的第 6 行,比较了一个基本类型值和一个非基本类型值。在这种情况下,采用规则 №11 。该算法的结果是一个空字符串。 在下一步中,将一个空字符串和 false 相比较。...在我们看例子之前,我要给你个提示:永远不要对布尔值(true 和 false)使用双等于号。...文档 中的规则。当其中一个被比较的值是非基本类型时,比较数组和布尔值会调用 ?ToPrimitive() 抽象操作(规则 №11)。 之后的三步(译注:第二个 if 子句)直接了当。...应谨记当两侧被比较的值是 0、一个空字符串或只包含空格的字符串时,使用双等号是个不好的做法。 下一件应牢记之事是避免对非基本类型使用双等号。唯一能使用它的时机是一致性检查时。...借助该方法,我们终于可以在无副作用的情况下执行一致性比较。最后我们可以讲,使用双等号只对基本类型安全,对非基本类型则不安全。

    1.8K30

    【点滴】JavaScript中的 Object.is() 与 === 运算符有什么区别?

    前端点滴front-end tips ---- 分类:JavaScript | Object, Type 如果要检查 JavaScript 中的相等性,有两个比较运算符:双等号运算符(==)和三等号运算符...简而言之,双等号运算符(==)仅仅比较值,而三等号运算符(===)可以比较值和类型。但是还有第三个选项 Object.is(),除了 NaN,+0 和 -0 之外,其行为与三等号于运算符相同。...以下是一些例子,可进一步明确说明: {} === {}; // false Object.is({}, {}); // false 1 === 1; // false Object.is(1, 1);...// true 以下代码是在 ES5 中模拟实现的Object.is: Object.defineProperty(Object, 'is', { value: function(x, y) {...if (x === y) { // 针对+0 不等于 -0的情况 return x !

    36610

    Python 基础知识学习

    每个变量在内存中创建都包括变量的标识名称和数据这些信息。 每个变量在使用前都必须赋值变量赋值以后该变量才会被创建。 等号=用来给变量赋值。...等号=运算符左边是一个变量名,等号=运算符右边是存储在变量中的值。...Python程序语言指定任何非0和非空null值为true0 或者 null为false。...使用 and 与时表示只有两个条件同时成立的情况下判断条件才成功 4)、当if有多个条件时可使用括号来区分判断的先后顺序括号中的判断优先执行    此外 and 和 or 的优先级低于>大于、<小于等判断符号...while 判断条件 执行语句…… 执行语句可以是单个语句或语句块。判断条件可以是任何表达式任何非零、或非空null的值均为true。当判断条件假false时循环结束。

    1.8K10

    25 道神奇的 javascript 示例,全答对算我输!!!

    当至少一个操作数是 NaN 时,便是最后一种情况。每个 NaN 都要比较无穷无尽的一切,包括自己。 5. 它是 fail 你不会相信,但... (![] + [])[+[]] + (!...它从未成为标准,但被广泛使用在早期的 JS 代码中。当标准演变出新的 API 时(例如 document.getElementById)这个 API 调用就被废弃了,标准委员会必须决定如何处理它。...其与 undefined 使用严格相等比较得出 false 而使用抽象相等比较 得出 true 是因为这个有意的对标准的违反明确地允许了这一点。 9....它可以转换整数和浮点的字符串表示,以及非字符串值 true ,false 和 null 。 如果它不能解析特定的值,它将转化为 NaN 。...三个数字的比较 1 true 3 > 2 > 1; // -> false 说明: 为什么会这样呢?其实问题在于表达式的第一部分。

    1K10

    《JavaScript高级程序设计(第四版)》学习笔记(三)第3章(续)

    递增递减操作符 前置型:++(--)值先递增(递减),后执行语句 后置型:值++(–) 先使用值执行语句,再递增(递减) i++ ++i 注意:布尔值++时 false 会变成 1 在应用于对象时,先调用对象的...一元加和减操作符 当加的值是非数值时,则会执行与使用 Number()转型函数一样的类型转换 一元减同理 let str = "ljc"; str = -str; //NaN 3.5.2 位操作符...等于和不等于 2....true_value : false_value; 当第一个表达式为真时,variable的值为true_value,为假则为false_value 3.5.10 赋值操作符 乘后赋值(*=)...: console.log("Between 10 and 20."); break; default: console.log("More than 20."); } switch 语句在比较每个条件的值时

    45220

    JavaScript 编程精解 中文第三版 一、值,类型和运算符

    任何一段离散信息都可以简化为零和一的序列,从而以位表示。 例如,我们可以用位来表示数字 13。...,-等)也包含在排序中。 比较字符串时,JavaScript 从左向右遍历字符,逐个比较 Unicode 代码。 其他类似的运算符则包括>=(大于等于),和!...console.log("Apple" == "Orange") // → false 在 JavaScript 中,只有一个值不等于其自身,那就是NaN(Not a Number,非数值)。...当相同类型的值之间使用==符号进行比较时,其运算结果很好预测:除了NaN这种情况,只要两个值相同,则返回true。但如果类型不同,JavaScript 则会使用一套复杂难懂的规则来确定输出结果。...在第二个和第三个值中,只有被选中的值才会求值。 本章小结 在本章中,我们介绍了 JavaScript 的四种类型的值:数字,字符串,布尔值和未定义值。

    1.1K80

    JavaScript基础-运算符与条件语句

    在JavaScript编程中,运算符和条件语句是构建逻辑和控制程序流程的核心工具。...比较运算符 用于比较值,如等于==、严格等于===、不等于!=、严格不等于!==、小于等。 3. 逻辑运算符 用于组合多个布尔表达式,如与&&、或||、非!。 4....二、常见问题与易错点 易错点1:比较运算符的误用 问题:使用==而非===进行比较,导致类型转换带来的意外结果。 避免方法:优先使用严格等于===,它要求两边的值和类型都相等。..."C" : "D or F"; console.log(result); // 简洁的三元运算符实现成绩等级划分 结语 理解和熟练运用JavaScript中的运算符与条件语句,是构建逻辑复杂度逐渐增加的应用程序的基础...通过识别并避免上述易错点,不仅能够提升代码的执行效率,还能显著增强代码的可读性和可维护性。希望本文的解析与示例能帮助你在JavaScript的学习之路上更进一步,写出更加高效、清晰的代码。

    11310

    JavaScript字符串间的比较

    字符串在JavaScript中几乎无处不在,在你处理用户的输入数据的时候,在读取或设置DOM对象的属性时,在操作cookie时,当然还有更 多…。...@雪斌在JavaScript中的字符串操作一文中讲的很详细,但是对于涉及Js字符串的比较,还是有必要再学习和探究下的。.../49 6)当数字和字符串比较,且字符串为非纯数字时,则将非数字字符串转成数字的时候会转换为NaN,当NaN和数字比较时不论大小都返回false(NaN “Not a Number”。...如果用”和”>”来比较字符串,那么JavaScript把它们作为Unicode来比较, 但显然,人们在浏览网页时不会把文本当作Unicode来阅读:) 比如在西班牙语中,按照传统的排序,”ch”将作为一个字符排在...Javascript解释器,只”提升”var命令定义的变量,对不使用var命令、直接赋值的变量不起作用,这就是为什么不加var会报错的原因。

    9.4K90

    JavaScript基础- 运算

    JavaScript中常用的运算符有: - 算数运算符 - 递增和递减运算符 - 比较运算符 - 逻辑运算符 - 赋值运算符 1.2 算数运算符 算术运算符概述 概念:算术运算使用的符号,用于执行两个变量或值的算术运算...在 JavaScript 中,递增(++)和递减( -- )既可以放在变量前面,也可以放在变量后面。...+ num++); // 20 1.4 比较运算符 比较运算符概述 概念:比较运算符(关系运算符)是两个数据进行比较时所使用的运算符,比较运算后,会返回一个布尔值(true / false...等号比较 ?...一元运算符里面的逻辑非优先级很高 逻辑与比逻辑或优先级高 2 - 流程控制 2.1 流程控制概念 在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。

    59741
    领券