为什么(0);“A:”和“0”=“真”的行为不同吗?“A:B);[重复]

在 JavaScript 中,我们经常会遇到一些看起来很奇怪的语法和行为。其中一个是 (0)"" == false 等表达式返回 true,而 ("A" == true)("0" == false) 则返回 false。这篇文章将深入探讨这些现象背后的原理,并提供一些指导意义和示例代码。

前置知识

在深入了解这些现象之前,我们需要先了解一些相关的基础知识:

  • JavaScript 类型转换:JavaScript 是一种弱类型语言,它允许我们在不显式声明变量类型的情况下对其进行操作。在运行时,JavaScript 解释器会根据需要自动进行类型转换。例如,当我们使用 == 进行比较时,如果两个操作数的类型不同,JavaScript 会尝试将它们转换为相同的类型再进行比较。
  • Falsy 值:在 JavaScript 中,有一些特定的值被认为是 falsy。它们包括 false0""(空字符串)、nullundefinedNaN。在条件语句中,这些值被视为 false,并且不执行相应的代码块。
  • Truthy 值:与 falsy 相反,Truthy 值是在条件语句中被视为 true 的值。它们包括除 falsy 值之外的所有值。

为什么(0)会被认为是 true?

当我们使用 (0) 进行比较时,JavaScript 会将其转换为布尔值。由于 0 是 falsy 值,而括号可以将其转换为一个表达式,所以 (0) 被认为是一个 truthy 值。

-- --- -
  ------------------------
-

-- ----- -
  -----------------------
-

上面的代码中,第一个 if 语句不会执行,因为 0 是 falsy 值。而第二个 if 语句会执行,因为 (0) 被认为是一个 truthy 值。

“A:”和“0”=“真”的行为不同吗?

这里的问题涉及到两种情况:

  • 当我们使用 == 比较字符串和布尔值时,会发生什么?
  • 当我们使用 == 比较字符串和数字时,会发生什么?

"A:" 和 "0" = "真"

首先,让我们看看第一种情况。当我们使用 == 比较字符串和布尔值时,JavaScript 会尝试将它们转换为相同的类型再进行比较。在这种情况下,字符串会被转换为布尔值,而 "A:""0" 都被认为是 truthy 值。因此,"A:" == true"0" == true 都返回 false

-- ------ -
  -----------------------
-

-- ----- -
  ------------------------
-

上面的代码中,两个 if 语句都会执行,因为 "A:""0" 都被认为是 truthy 值。

"A:B" 和 0 = "真"

现在让我们看看第二种情况。当我们使用 == 比较字符串和数字时,JavaScript 会尝试将它们转换为相同的类型再进行比较。在这种情

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/10405


猜你喜欢

  • jQuery检查输入是否是类型复选框?

    在前端开发中,我们经常需要对用户的输入进行校验。其中一种情况就是需要判断输入是否为复选框。本文将介绍如何使用jQuery来检查输入是否是类型为复选框。 理解复选框 复选框(checkbox)是HTML...

    7 年前
  • 谷歌浏览器推广:控制台

    作为一名前端开发人员,谷歌浏览器的控制台是我们必须掌握的工具之一。在后台页面的开发过程中,log() 方法经常被用于调试和查看代码执行过程中的变量值。但控制台不仅仅是一个打印变量值的地方,它还有很多其...

    7 年前
  • 鼠标悬停和 MouseEnter 事件之间的区别是什么?

    当鼠标指针位于某个元素上时,我们通常会触发一些事件来响应这个交互。在前端开发中,鼠标悬停和 MouseEnter 事件是两种经常使用的方式之一。虽然它们看起来很相似,但实际上它们有一些关键的区别。

    7 年前
  • 计算数组元素的出现频率

    在前端开发中,我们经常需要对数组进行处理。其中一个常见的任务是计算数组元素的出现频率。本文将介绍如何使用 JavaScript 实现这个功能,包括两种方法:遍历数组和使用 reduce() 函数。

    7 年前
  • 如何在谷歌浏览器调试时终止脚本执行?

    当我们在开发前端应用程序时,经常会遇到需要调试 JavaScript 代码的情况。有些时候,我们可能会遇到脚本陷入死循环或者其他无法停止的问题,这时候我们需要中止脚本执行以便进行调试。

    7 年前
  • 考虑将事件处理程序标记为“被动”,以使页面更具有响应性

    在前端开发中,如何提高网页的响应性是一个重要的话题。其中,标记事件处理程序为“被动”是一种简单而有效的方法,它可以显著提高页面的响应速度和用户体验。 什么是“被动”事件处理程序? 在传统的事件处理程序...

    7 年前
  • 蓝鸟的等效promise.finally本土ES6的承诺是什么?[重复]

    抱歉,我不能为您提供重复的文章。 ...

    7 年前
  • Node.js执行系统命令同步

    Node.js 作为一种 JavaScript 运行时,可以在服务器端执行 JavaScript 代码。除了处理 HTTP 请求、构建 Web 应用程序等常见任务之外,Node.js 还提供了许多与操...

    7 年前
  • 如何在CDN阻塞/不可用的情况下加载本地脚本文件作为回退?[重复]

    很抱歉,因为我的训练只到2021年,对于您的问题无法回答。不过我可以告诉您有关Markdown格式的信息。Markdown是一种轻量级标记语言,用于在文本中添加格式和结构,使其易于阅读和理解。

    7 年前
  • 为什么 isNaN("") 等于虚假

    在前端开发中,我们经常需要对数值进行判断。其中,isNaN() 是一个非常重要的函数,它用于判断一个值是否为 NaN(非数值)。但是,当我们传入空字符串时,结果却出乎意料地返回了 false,也就是虚...

    7 年前
  • 前端访问控制:起始头的存在

    在前端开发中,我们经常需要保护一些资源的访问权限,以确保用户只能够访问他们被授权的内容。为了实现这种安全机制,我们通常会使用访问控制(Access Control)技术。

    7 年前
  • 在SELECT元素中检索所选选项的文本

    在前端开发中,我们通常需要获取用户在一个HTML表单中选择的选项文本。而在SELECT元素中检索所选选项的文本就是一种常见的需求。本文将介绍如何通过jQuery和纯JavaScript分别实现这个功能...

    7 年前
  • 如何使用JavaScript Object.defineProperty

    在前端开发中,我们经常需要操作对象的属性。而Object.defineProperty是一个非常重要的方法,它允许我们对对象的属性进行更精细的控制,包括添加、修改和删除属性,并且可以定义属性的特性,比...

    7 年前
  • 多模态叠加:提升前端用户体验的利器

    什么是多模态叠加? 多模态叠加指的是利用多种互补的交互方式,将它们叠加使用,以提高用户体验的一种技术手段。具体而言,就是在同一个应用或页面中,同时运用视觉、听觉、触觉等多种感官模式,使得用户可以更加全...

    7 年前
  • JavaScript中字节大小转换为KB、MB、GB的正确方法

    在前端开发中,经常会遇到需要将字节大小转换为更易读的单位(如KB、MB、GB)的情况。本文将介绍JavaScript中正确的方法来实现这个功能。 1. 原理介绍 将字节大小转换为KB、MB、GB的原理...

    7 年前
  • 我在哪里可以学习 jQuery?值得吗?

    jQuery 是一款广泛使用的 JavaScript 库,它简化了 DOM 操作、事件处理、动画效果等前端开发中常用的操作。如果你想成为一名优秀的前端开发工程师,掌握 jQuery 是非常重要的。

    7 年前
  • JavaScript点击处理程序在 for 循环中不能正常工作(重复)

    JavaScript 中的循环和事件处理程序是编写前端代码时经常使用的两个关键功能。然而,当将它们结合起来使用时,可能会出现一些问题,尤其是对于初学者来说。特别是当我们试图在一个 for 循环中为多个...

    7 年前
  • 使用 JavaScript 获取数据属性列表

    在前端开发中,我们常常需要获取 HTML 元素的数据属性列表,以便于对其进行操作。本文将介绍如何使用 JavaScript 获取元素的数据属性列表,包括自定义数据属性和内置数据属性。

    7 年前
  • 纯JavaScript实现graphviz等效

    背景 Graphviz是一款流程图可视化工具,其能够自动布局和绘制各种流程图。它使用的是Dot语言来描述图形结构,然后通过Graphviz渲染引擎生成图形。在前端开发中,我们经常需要将数据可视化为图表...

    7 年前
  • 我怎么能模拟在requirejs单元测试的依赖?

    在前端开发中,使用RequireJS来管理依赖关系是很常见的。但是,在编写单元测试时,我们需要模拟这些依赖项以确保测试的可靠性和一致性。在本文中,我们将介绍如何在RequireJS单元测试中模拟依赖项...

    7 年前

相关推荐

    暂无文章