ES7 之二进制链式操作符(&、|、^、~)详解

在 ES6 中,我们已经可以使用二进制操作符(&、|、^、)进行位运算,但这些运算符有一个局限性,就是只能对数字类型进行操作。而 ES7 提供了一种新的运算符,即二进制链式操作符(&、|、^、),可以更好地支持大型二进制数据操作,例如像视频编码和解码等。

二进制操作符的基础概念

在介绍二进制链式操作符之前,我们先来了解一下二进制操作符的基本概念。

二进制与十进制互相转换

在计算机中,所有的数据都是以二进制的形式存储的。与十进制不同,二进制只有两个数码:0 和 1。

将一个十进制数转换成二进制数,可以通过除以 2 取余数的方法来实现。例如,将十进制数 11 转换成二进制数,过程如下:

  • 11 ÷ 2 = 5 ... 1
  • 5 ÷ 2 = 2 ... 1
  • 2 ÷ 2 = 1 ... 0
  • 1 ÷ 2 = 0 ... 1

所以,11 的二进制形式为 1011。

将一个二进制数转换成十进制数,可以通过将二进制中的每一位按照权重相加的方法来实现。例如,将二进制数 1011 转换成十进制数,过程如下:

  • 1 x 2^3 + 0 x 2^2 + 1 x 2^1 + 1 x 2^0 = 8 + 0 + 2 + 1 = 11

二进制操作符

二进制操作符是用来操作二进制数的特殊运算符。在 JavaScript 中,二进制操作符有以下几种:

  • 按位与(&):返回两个数都是 1 的位。
  • 按位或(|):返回两个数中有一个是 1 的位。
  • 按位异或(^):返回两个数不相同的位。
  • 按位非(~):返回数值的反码,即把所有的 0 换成 1,1 换成 0。

ES7 新增的二进制链式操作符

ES7 新增的二进制链式操作符(&、|、^)允许这些方法链式应用,并且允许不同于数字的数据类型应用它们。

语法

二进制链式操作符的语法如下:

- - -
- - -
- - -

其中:

  • x 和 y 可以是任何数据类型。
  • 以上三个操作符返回的结果类型与 x 类型相同。

示例

下面我们来看一些二进制链式操作符的示例。

对数字类型进行二进制操作

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

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

对字符串类型进行二进制操作

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

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

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

对数组类型进行二进制操作

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

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

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

总结

二进制链式操作符是 ES7 新增的一种运算符,允许进行不同于数字类型的二进制数据操作,例如字符串和数组。本文中,我们介绍了二进制与十进制互相转换的基本方法,并且给出了一些二进制链式操作符的使用示例。在开发中,我们可以根据实际需求,利用这些操作符来进行更加高效、便捷的二进制数据操作。

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


猜你喜欢

  • Enzyme 测试 React 组件时遇到的事件模拟问题及解决方法

    React 组件的测试是前端开发中非常重要的环节。而 Enzyme 则是 React 组件测试中常用的工具之一,它可以方便地进行组件的渲染、查找和操作。但是,有时候我们在测试组件时会遇到事件模拟的问题...

    1 年前
  • 如何在 SASS 中使用 Interpolation 解决 Selector 过长的问题

    在编写前端样式代码时,我们经常会遇到 Selector 过长的情况。这种情况很容易让代码难以阅读并增加错误的概率,因此我们需要一种方法来简化 Selector。 在 SASS 中,使用 Interpo...

    1 年前
  • Web Components 组件通信及属性绑定指南

    Web Components 是 Web 开发领域中的新概念,它是一种自定义的标签,可以在 HTML 中重复使用。Web Components 具有开发独立、可重用、可扩展以及可组合的优点。

    1 年前
  • Webpack 打包器面临的 Bug 和解决方案的详细解释

    随着前端技术的迅猛发展,Webpack作为目前比较火热的打包工具,其底层实现也越来越复杂。在使用中,经常会遇到一些未知的 Bug,非常影响开发效率。本文就 Webpack 打包器面临的一些 Bug 和...

    1 年前
  • 使用 CSS Grid 布局如何实现等高列?

    在前端开发中,经常需要将多列元素的高度设置为相等,以达到更美观的布局效果。传统的方法是使用 JavaScript 来计算元素的高度并设置相同的高度,但这会增加页面的加载时间和性能开销。

    1 年前
  • ES6 中的解构赋值优雅获取嵌套对象属性及解决多项属性的情况

    在前端开发中,操作对象是很常见的,但有时候我们需要获取嵌套对象的属性或者解决多项属性的情况,这时候 ES6 中的解构赋值就可以派上用场。 什么是解构赋值 解构赋值是 ES6 中的一种赋值语法,用于从数...

    1 年前
  • 如何使用 ECMAScript 2017 中的 for-await-of 循环处理异步操作

    在 Javascript 中,异步操作经常会出现,而在处理异步操作时,我们需要使用诸如 Promise、async/await 等语法来管理异步流程。而在 ECMAScript 2017 中,新增加的...

    1 年前
  • Java NIO 性能优化:减缓 GC

    Java NIO 性能优化:减缓 GC Java NIO 是一个用于高效处理 I/O 操作的 API,它提供了一些新的 I/O 类,如 ByteBuffer、CharBuffer、Selector 等...

    1 年前
  • 如何在 React 中实现页面缓存

    React 是一个非常流行的前端框架,它可以帮助我们更轻松地开发 Web 应用程序。但是,在处理大型应用程序时,我们可能需要考虑一些性能问题。其中一个问题就是如何在 React 中实现页面缓存,以优化...

    1 年前
  • 解决使用 Express.js 时遇到的 CORS 跨域请求问题

    什么是 CORS 跨域请求问题? CORS(Cross-Origin Resource Sharing)是一种安全机制,用于防止网站从多个源点进行攻击。浏览器遵循同源策略,即浏览器只允许与同源的服务器...

    1 年前
  • 详解 Mocha 测试框架中的 before、after、beforeEach 和 afterEach

    Mocha 是一个流行的 JavaScript 测试框架,它支持多种测试类型和多种断言库。在这篇文章中,我们将深入探讨 Mocha 中的 before、after、beforeEach 和 after...

    1 年前
  • 使用 Jest 套件对 Node.js 项目进行快速测试的技巧总结

    在开发 Node.js 项目时,测试是非常必要的一环。使用 Jest 套件可以方便快捷地对 Node.js 项目进行单元测试、集成测试、功能测试等测试工作。下面总结了一些使用 Jest 套件进行 No...

    1 年前
  • Koa 中使用 Joi 进行参数验证的技巧

    在编写 Node.js 应用时,我们经常需要对传入的参数进行验证,以确保它们的类型和格式符合预期。为了方便地进行参数验证,我们可以使用一个称为 Joi 的库。Joi 是一个流行的 Node.js 参数...

    1 年前
  • RESTful API 中如何处理版本号问题

    在开发 RESTful API 过程中,版本号管理是一个很重要的问题。因为在不同版本中可能会有不兼容的修改,如果没有好的版本管理策略,就会导致客户端和服务端之间的通信出现问题,甚至影响到整个应用的稳定...

    1 年前
  • 如何在 PM2 下管理多个 Node.js 版本

    简介 在开发和部署 Node.js 应用程序的过程中,很可能需要同时使用多个 Node.js 版本,并且需要对每个版本的应用程序进行管理和部署。PM2 是一个流行的 Node.js 进程管理工具,可以...

    1 年前
  • Promise 的 then() 方法中如何正确使用 catch() 方法

    Promise 的 then() 方法中如何正确使用 catch() 方法 Promise 是一个非常常用的前端异步编程技术,它极大地简化了异步操作的代码结构,让我们可以更加清晰地表达程序逻辑。

    1 年前
  • Custom Elements 实现在线编辑器组件,完美的 HTML、CSS、JS 组合

    随着 Web 技术的不断发展,前端开发已经成为当前软件开发中最重要的部分之一。而前端组件化的发展趋势也日趋明显,开发一些高效、可复用、可维护的组件将成为前端开发的重点之一。

    1 年前
  • 浅析 ES11 的 Promise.allSettled API 及其与 Promise.all 的区别

    前言 Promise 在 JavaScript 前端开发中广泛使用,它是一种异步编程解决方案,能够解决异步操作的问题。在 ES11(即 ECMAScript 2020)中,新增了 Promise.al...

    1 年前
  • SASS 中如何使用 @function 实现动态尺寸计算

    前言 随着网站的响应式设计越来越普及,我们需要在不同的设备上展现不同的布局和样式,而 SASS 中的 @function 可以帮助我们实现动态尺寸计算,让我们在响应式设计中更加方便和灵活地处理尺寸问题...

    1 年前
  • 使用 Chai 和浏览器测试工具测试 JavaScript 应用程序

    JavaScript 应用程序的质量是使用者判断其价值和可靠性的标准之一。为了确保应用程序的质量,程序员需要使用测试工具来测试程序的正确性和可靠性。Chai 和浏览器测试工具是两个常用的 JavaSc...

    1 年前

相关推荐

    暂无文章