学习JavaScript的真假值然后理解!!运算符的使用

news/2024/10/11 20:02:51/
真值(truthy)和假值(falsy)

在 JavaScript 中,有一些值总是被认为是假值(falsy),其他的都被认为是真值(truthy)。以下是常见的假值:

  • false
  • 0(数字零)
  • ""(空字符串)
  • null
  • undefined
  • NaN(不是数字)

除了这些,其他值在布尔上下文中都被视为真值(truthy)。比如:

  • 非空字符串(如 "hello"
  • 非零数字(如 1-100
  • 对象(如 {} 或 []
  • 函数

!!运算符的工作原理

!! 运算符在 JavaScript 中其实是两个叹号 ! 的组合运算,用来将任意值转换为布尔值(true 或 false)。具体来说:

  1. 第一个 ! 运算符会将值转换为其相应的布尔值的否定值
  2. 第二个 ! 运算符再将这个否定值反转回来,变成该值的原始布尔值

也就是说,!! 运算符的实际作用是将一个任意类型的值转成布尔类型,同时根据它的“真值”或“假值”来返回 true 或 false

如何工作

让我们看看它的工作原理分成两步:

  • 第一步:!value
    • 这一步会把 value 转换为布尔值并取反。如果 value 是“真值”(truthy),则返回 false;如果 value 是“假值”(falsy),则返回 true
  • 第二步:!(!value)
    • 这一步再对上一步的结果取反。如果上一步是 false,那么这一步返回 true;如果上一步是 true,则这一步返回 false。最终的结果就是 value 的布尔表示。

!! 的常见用途

  • 将任意值转换为布尔值:在实际编码中,!! 常用于将一个未知的值转换为布尔值,以便我们能够明确知道它是 true 还是 false
  • var value = “Hello”; var isTruthy = !!value; // `isTruthy` 为 true
  • 验证对象是否存在:通常用于验证一个变量是否已定义或是否有值。
  • var user = getUser(); // 假设这个函数可能返回 null 或者 undefined
  • if (!!user) { // user 存在,可以使用 } else { // user 不存在,做一些默认操作 }
  • 简化条件判断:比如你需要将一个任意值强制转换成布尔类型,并确保值是 true 或 false,而不是其他可能的“真值”或“假值”。
  • var isValid = !!someValue; // 将 `someValue` 转换为 `true` 或 `false`

举例说明

解释

console.log(!!0); // false,因为 0 是假值

console.log(!!1); // true,因为非零数字是真值

console.log(!!""); // false,因为空字符串是假值

console.log(!!"hello"); // true,因为非空字符串是真值

console.log(!!null); // false,因为 null 是假值

console.log(!!undefined); // false,因为 undefined 是假值

console.log(!!{}); // true,因为对象是真值

console.log(!![]); // true,因为数组也是对象,因此是真值

console.log(!!NaN); // false,因为 NaN 是假值

console.log(!!function(){});// true,因为函数是对象,因此是真值


http://www.ppmy.cn/news/1537606.html

相关文章

线性代数书中求解齐次线性方程组、非齐次线性方程组方法的特点和缺陷(附实例讲解)

目录 一、克拉默法则 1. 方法概述 2. 例16(1) P45 3. 特点 (1) 只适用于系数矩阵是方阵 (2) 只适用于行列式非零 (3) 只适用于唯一解的情况 (4) 只适用于非齐次线性方程组 二、逆矩阵 1. 方法概述 2. 例16(2) P45 3. 特点 (1) 只适用于系数矩阵必须是方阵且可逆 …

Docker容器简介及部署方法

1.1 Docker简介 Docker之父Solomon Hykes:Docker就好比传统的货运集装箱 2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差 docker2013年首次发布,由Docker, Inc开发 1.1.1什么是Docker Docker是管理容器的引…

蓝桥等级考试C++组18级真题-2023-06-18

选择题 1 C L18(15分) 已定义double rate 3.921576;以下可以正确输出变量rate 的是()。 A printf("%d",rate); B printf("%f",rate); C printf("%ld",rate); D printf("%r",rate)&#…

绘制YOLOv11模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线

一、本文介绍 本文用于绘制模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线。用以比较不同算法的收敛速度,最终精度等,并且能够在论文中直观的展示改进效果。支持多文件的数据比较。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、轻量化…

postgresql的TOAST表

在 PostgreSQL 中,TOAST(The Oversized-Attribute Storage Technique)是一种处理超大数据(如大型文本字段、大型字节数组等)存储的技术。当表中的某些字段非常大,无法直接存储在一个标准 PostgreSQL 数据页…

通过Express + Vue3从零构建一个用户认证与授权系统(一)项目结构设计

项目背景 本文基于 TypeScript Express Vue3 ,从零构建一个用户认证与授权管理系统。这个系统的核心部分包括前端、后端和数据库。我们需要确保各部分合理分层、易于维护和扩展,让我们一步步去实现我们的系统。 一、项目结构设计 1. 前端 (Vue 3 E…

fatal: urdf 中的 CRLF 将被 LF 替换

git add relaxed_ik_ros2 fatal: relaxed_ik_ros2/relaxed_ik_core/configs/urdfs/mobile_spot_arm.urdf 中的 CRLF 将被 LF 替换 这个错误信息表示 Git 在处理文件 mobile_spot_arm.urdf 时发现它使用了 CRLF(回车换行符,常见于 Windows 系统&#xff0…

[Meachines] [Easy] Sea WonderCMS-XSS-RCE+System Monitor 命令注入

信息收集 IP AddressOpening Ports10.10.11.28TCP:22,80 $ nmap -p- 10.10.11.28 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 e3:54:…