javascript操作符”!~”详解

JavaScript操作符 "!~" 详解

操作符说明

在 JavaScript 中,符号 "!~" 是两个操作符的组合。

其中 "!" 是逻辑否定运算符,用于将一个布尔值取反。如果原值为 true,则取反后的值为 false。如果原值为 false,则取反后的值为 true。

而 "~" 是位运算符 NOT,它将操作数的每个二进制位按位取反(0 变为 1 ,1 变为 0)。

综合起来,"!~" 操作符的作用是将一个字符串中的所有字符的 ASCII 值与某个整数进行位操作,并返回一个布尔值,表示是否包含该整数。

示例说明

示例一

下面的代码片段演示了如何使用 "!~" 操作符判断一个字符串是否包含某个字符:

const str = "Hello, world!";

if (!~str.indexOf("o")) {
  console.log("The string does not contain the letter 'o'");
} else {
  console.log("The string contains the letter 'o'");
}

这里使用了 String.prototype.indexOf() 方法来查找字符串中是否包含指定字符。

如果字符串不包含该字符,则 indexOf() 返回 -1。由于 -1 在进行位操作时会被 ~ 运算符转换为 0xffffffff,而 0xffffffff 在进行逻辑非运算时会被转换为 true,所以整个 !~ 表达式的结果为 false,即字符串不包含指定字符。

反之,如果字符串包含该字符,则 indexOf() 返回对应的位置,而该位置经过位操作后不是 0xffffffff,所以整个 !~ 表达式的结果为 true,即字符串包含指定字符。

示例二

下面的代码片段演示了另一个使用 "!~" 操作符的例子:

const nums = [1, 3, 5, 7, 9];

if (!~nums.indexOf(4)) {
  console.log("The array does not contain the number 4");
} else {
  console.log("The array contains the number 4");
}

这里使用了 Array.prototype.indexOf() 方法来查找数组中是否包含指定元素。

如果数组不包含该元素,则 indexOf() 返回 -1。由于 -1 在进行位操作时会被 ~ 运算符转换为 0xffffffff,而 0xffffffff 在进行逻辑非运算时会被转换为 true,所以整个 !~ 表达式的结果为 false,即数组不包含指定元素。

反之,如果数组包含该元素,则 indexOf() 返回对应的位置,而该位置经过位操作后不是 0xffffffff,所以整个 !~ 表达式的结果为 true,即数组包含指定元素。

总结

"!~" 操作符的使用要谨慎,因为它不太直观,容易造成理解和维护上的困难。一般来说,还是建议使用更加明确易懂的语法来编写代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript操作符”!~”详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 简单介绍JavaScript的变量和数据类型

    当我们在编写JavaScript程序时,变量和数据类型是经常需要用到的概念,下面就来详细讲解一下。 基本概念 变量 变量是用来存储数据的容器,可以通过使用变量名来引用这些数据。JavaScript中的变量声明可以使用 var、let、const 等关键字来完成,其中 var 关键字是早期版本的语法,let 和 const 关键字是ES6中新增的。 数据类型 …

    JavaScript 2023年5月28日
    00
  • Linux下使用jq友好的打印JSON技巧分享

    Linux下使用jq友好的打印JSON技巧分享 什么是jq? jq是一个轻量级的命令行JSON处理工具,它具有过滤、修改和转换JSON数据的功能,并且非常灵活和强大。 安装jq 在大多数Linux发行版上,jq可以通过软件包管理器来安装,例如在Debian/Ubuntu上,可以使用以下命令: sudo apt-get install jq 如果使用的是其他发…

    JavaScript 2023年5月27日
    00
  • 聊一聊JavaScript的URL对象是什么

    下面是关于JavaScript的URL对象的详细讲解攻略。 什么是URL对象? URL(Uniform Resource Locator,统一资源定位符)是一个指向互联网上资源的指针。在JavaScript中,我们可以通过URL对象来获取和操作URL,URL对象可以让我们轻松地访问、解析和操作URL。 URL 对象的属性和方法 URL对象有许多属性和方法,下…

    JavaScript 2023年5月27日
    00
  • javascript在myeclipse中报错的解决方法

    当我们在 MyEclipse 中使用 JavaScript 时,有时可能会遇到各种报错,这可能是由于文件路径、文件名、语法错误及其他原因引起的。本文将为您介绍一些解决方法,帮助您更好地使用 MyEclipse 编写 JavaScript。 1. 检查文件路径 在 MyEclipse 中编写 JavaScript 时,我们必须确保文件路径正确。如果文件路径不正…

    JavaScript 2023年5月18日
    00
  • js如何构造elementUI树状菜单的数据结构详解

    下面是关于如何构造ElementUI树状菜单数据结构的攻略: 一、树状菜单数据结构的构成 ElementUI树状菜单所需要的数据结构是一个层级结构的树形数据结构,它由多个节点组成,每个节点可能有子节点,也可能没有。一棵树可以看做是枝干和叶子构成的,枝干负责连接,而叶子负责储存信息。因此,需要针对菜单的特性构造一个合适的数据结构,这个数据结构应该包含以下属性:…

    JavaScript 2023年6月10日
    00
  • javascript实现匀速动画效果

    下面是“javascript实现匀速动画效果”的完整攻略。 什么是匀速动画 匀速动画就是指在移动过程中速度保持不变的动画。比如,一个物体从 A 点移动到 B 点,如果速度一直保持不变,则称为匀速动画。这种动画效果在一些场合会比较实用,比如模拟车辆行驶等。 实现原理 要实现匀速动画,我们需要计算出物体移动时每个单位时间的位移量。假设我们要移动的距离是 $dis…

    JavaScript 2023年6月10日
    00
  • Python对象与引用的介绍

    Python对象与引用的介绍 在Python中,一切都是对象。对象(Object)是Python中最重要的概念之一,懂得如何管理对象在Python编程中至关重要。Python中的所有变量都是对象的一个引用,这就意味着当我们将一个对象赋值给一个变量时,实际上是将这个对象的引用赋值给变量。这也就是为什么很多人将Python描述成一门“动态”“弱化”的语言,因为我…

    JavaScript 2023年6月11日
    00
  • 深入剖析Java中的各种异常处理方式

    深入剖析Java中的各种异常处理方式 在Java中,异常处理是一项非常重要的任务。Java内置了许多不同的异常类型,以及许多不同的异常处理方式。在本文中,我们将深入剖析Java中的各种异常处理方式,向你展示如何优雅地处理程序可能出现的异常情况。 异常的产生原因 在Java中,异常是代码运行时可能遇到的问题或错误的一种表示。通常情况下,异常会导致程序终止或崩溃…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部