返回顶部
首页 > 资讯 > 精选 >怎么使用JavaScript编写枚举
  • 828
分享到

怎么使用JavaScript编写枚举

2023-07-02 11:07:44 828人浏览 薄情痞子
摘要

本篇内容介绍了“怎么使用javascript编写枚举”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言假设有这样一个场景,我们需要统计员工的

本篇内容介绍了“怎么使用javascript编写枚举”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

前言

假设有这样一个场景,我们需要统计员工的技术栈,目前我们需要标记的技术有 CSS、JavaScript、htmlwebGL

然后我可以这样写枚举:

const SKILLS = { CSS: 1 , js: 2, HTML: 3, WEB_GL: 4}

之前是这样写的,但是,最近看Vue源码的时候,发现了一个高效使用枚举的技巧,在这里分享给大家。

定义枚举

我们可以这样写上面的枚举:

const SKILLS = { CSS: 1 , JS: 1 << 1, HTML: 1 << 2, WEB_GL: 1 << 3}

<< 是什么?

左移运算符 (<<) 将第一个操作数左移指定位数。向左移动的多余位被丢弃。零位从右侧移入。

例如:

  • 二进制的 1 是 0000 0001 ,左移一位是 0000 0010 ,即十进制的 2 。

  • 如果我们将其移动两位,它将变为 0000 0100 ,即十进制的 4。

  • 如果我们将其移动三位,它将变为 0000 1000 ,即十进制的 8。

  • 如果我们将其移动 N 位,它将变为 2^Nin 十进制。

用法

按照上面的方法定义好枚举后,我们可以这样使用:

const SKILLS = { CSS: 1 , JS: 1 << 1, HTML: 1 << 2, WEB_GL: 1 << 3}// Use this value to store a user's tech-stacklet skills = 0// add a skill for the userfunction addSkill(skill) { skills = skills | skill}addSkill(SKILLS.CSS)addSkill(SKILLS.JS)// If this value is not 0, it means that the user has mastered the techconsole.log('Does he know CSS', SKILLS.CSS & skills)console.log('Does he know JavaScript', SKILLS.JS & skills)console.log('Does he know Web GL', SKILLS.WEB_GL & skills)

怎么使用JavaScript编写枚举

温馨提示:| 是按位或运算符,它在每个操作数的对应位为 1 的每个位位置返回 1。

const a = 5;        // 00000000000000000000000000000101const b = 3;        // 00000000000000000000000000000011console.log(a | b); // 00000000000000000000000000000111// expected output: 7

如何理解这段代码?

在 JavaScript 中,整数存储在 4 个字节中,即 32 位。第一个代表正负,后面的31代表数字。

当我们用二进制表示 1 , 1 << 2 时,它们看起来像这样:

怎么使用JavaScript编写枚举

我们定义的枚举变量只有一个二进制格式的1,并且占据不同的位置。

当我们向技能添加枚举选项时,我们使用skills | skill。假设现在我们需要添加的技能是SKILLS.CSS,那么在执行过程中,就是:

怎么使用JavaScript编写枚举

我们可以发现,在技能中,SKILLS.CSS对应的位置会变成1。反之,那么我们可以通过查看skills&SKILLS.CSS的结果是否为0来判断技能中是否存在SKILLS.CSS。顺便说一句,这里我们也可以发现这个技巧有个缺点,就是枚举项不能超过 31 个。

我们为什么要使用这个技巧?

答案很简单,这样的代码运行起来更高效。CPU中有直接对应位操作的指令,因此效率更高。

我们也可以做一个性能测试。如果我们不使用按位运算,而是使用传统的方法(数组或映射)来实现,那么代码如下。

Array 方法:

const SKILLS = { CSS: 1 , JS: 1 << 1, HTML: 1 << 2, WEB_GL: 1 << 3}// Use an array to store the user's tech-stacklet skills = []function addSkill(skill) { if (!skills.includes(skill)) { // Avoid duplicate storage   skills.push(skill) }}addSkill(SKILLS.CSS)addSkill(SKILLS.JS)skills.includes(SKILLS.CSS)skills.includes(SKILLS.JS)skills.includes(SKILLS.WEB_GL)

Map 方法:

const SKILLS = { CSS: 1 , JS: 1 << 1, HTML: 1 << 2, WEB_GL: 1 << 3}// Use a map to store the user's tech-stacklet skills = {}function addSkill(skill) { if (!skills[skill]) {   skills[skill] = true }}addSkill(SKILLS.CSS)addSkill(SKILLS.JS)skills[SKILLS.CSS]skills[SKILLS.JS]skills[SKILLS.WEB_GL]

这是 jsbench.me 的性能测试:

怎么使用JavaScript编写枚举

使用按位枚举,性能明显更高。

学习Vue源码

我是从 Vue 源代码中学到的。

export const enum ShapeFlags { ELEMENT = 1, FUNCTIONAL_COMPONENT = 1 << 1, STATEFUL_COMPONENT = 1 << 2, TEXT_CHILDREN = 1 << 3, ARRAY_CHILDREN = 1 << 4, SLOTS_CHILDREN = 1 << 5, TELEPORT = 1 << 6, SUSPENSE = 1 << 7, COMPONENT_SHOULD_KEEP_ALIVE = 1 << 8, COMPONENT_KEPT_ALIVE = 1 << 9, COMPONENT = ShapeFlags.STATEFUL_COMPONENT | ShapeFlags.FUNCTIONAL_COMPONENT}

“怎么使用JavaScript编写枚举”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么使用JavaScript编写枚举

本文链接: https://lsjlt.com/news/341752.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用JavaScript编写枚举
    本篇内容介绍了“怎么使用JavaScript编写枚举”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言假设有这样一个场景,我们需要统计员工的...
    99+
    2023-07-02
  • C#枚举和枚举成员怎么使用
    这篇文章主要讲解了“C#枚举和枚举成员怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#枚举和枚举成员怎么使用”吧!C#枚举类型是一种的值类型,它用于声明一组命名的常数。(1)C#枚...
    99+
    2023-06-17
  • JavaScript 编写枚举的最有效方法分享
    目录前言定义枚举<< 是什么?用法如何理解这段代码?我们为什么要使用这个技巧?学习Vue源码前言 假设有这样一个场景,我们需要统计员工的技术栈,目前我们需要标记的技术有 ...
    99+
    2024-04-02
  • 【javaSE】 枚举与枚举的使用
    文章目录 🎄枚举的背景及定义⚾枚举特性总结: 🌲枚举的使用🚩switch语句🚩常用方法📌示例一Ὄ...
    99+
    2023-09-20
    java 开发语言 枚举 源码 反射
  • Go项目怎么使用枚举
    目录前言为什么要有枚举定义新类型实现枚举protobuf中生成的枚举代码总结前言 哈喽,大家好,我是asong。枚举是一种很重要的数据类型,在java、C语言等主流编程语言中都支持了...
    99+
    2024-04-02
  • C#枚举类型怎么使用
    本篇内容介绍了“C#枚举类型怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#枚举,枚举是一种值类型,由许多名字的常量(也叫枚举表)...
    99+
    2023-06-17
  • 在Python中怎么使用枚举
    这篇文章主要为大家展示了“在Python中怎么使用枚举”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“在Python中怎么使用枚举”这篇文章吧。在 Python 中使用枚举。我们可以使用以下方法来...
    99+
    2023-06-27
  • 枚举怎么在Java中使用
    本篇文章给大家分享的是有关枚举怎么在Java中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用方法如下:package com.ljq.test;public class...
    99+
    2023-05-31
    java 枚举 ava
  • Java中的枚举怎么使用
    本篇内容主要讲解“Java中的枚举怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的枚举怎么使用”吧!枚举(enum)枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数...
    99+
    2023-07-05
  • c语言枚举怎么使用
    枚举是一种定义常量集合的数据类型,从 0 开始自增量。其使用步骤如下:定义枚举类型:enum 枚举类型名 { 常量1, 常量2, ...};声明枚举变量:enum 枚举类型名 变量名;赋...
    99+
    2024-05-21
    c语言 代码可读性
  • mysql枚举类型enum怎么使用
    在MySQL中,枚举类型(enum)用于定义一个可以选择的值列表。enum类型可以在创建表时定义,也可以在已存在的表中添加。下面是创...
    99+
    2023-08-30
    mysql
  • c++枚举类型enum怎么使用
    在C++中,枚举类型(enum)用于定义一组具有离散值的常量。它可以用来提高代码的可读性和可维护性。以下是使用枚举类型的基本语法:`...
    99+
    2023-10-10
    c++
  • Python枚举怎么定义与使用
    这篇文章主要介绍了Python枚举怎么定义与使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python枚举怎么定义与使用文章都会有所收获,下面我们一起来看看吧。1. 枚举的定义首先,定义枚举要导入enum模...
    99+
    2023-07-06
  • 怎么使用MyBatis的枚举类型
    在使用MyBatis的枚举类型时,需要按照以下步骤进行操作: 创建枚举类:首先需要创建一个枚举类来表示需要使用的枚举类型,比如: ...
    99+
    2024-03-08
    MyBatis
  • C#的枚举与位枚举怎么定义
    这篇文章主要介绍了C#的枚举与位枚举怎么定义的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#的枚举与位枚举怎么定义文章都会有所收获,下面我们一起来看看吧。一、枚举的概念C# 枚举(Enum), 枚举类型是用于...
    99+
    2023-06-27
  • Go中怎么正确使用对枚举
    本篇内容主要讲解“Go中怎么正确使用对枚举”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go中怎么正确使用对枚举”吧!枚举是强类型编程语言中的一种类型,由一组名称和值组成。通常用来在编程语言中充...
    99+
    2023-06-15
  • Java的贪心和枚举怎么使用
    今天小编给大家分享一下Java的贪心和枚举怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。笔试技巧:学会根据数据范围猜...
    99+
    2023-06-29
  • Python枚举类怎么定义和使用
    本篇内容主要讲解“Python枚举类怎么定义和使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python枚举类怎么定义和使用”吧!一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用...
    99+
    2023-06-30
  • C#中的枚举类型怎么使用
    在C#中,枚举类型用于定义一组命名的整数常量。以下是枚举类型的基本用法示例: // 定义一个枚举类型 public enum Day...
    99+
    2024-04-03
    C#
  • java 枚举使用方法
    前言在项目中有很多常量,我们都是使用枚举(enum)来处理,下面我就和大家分享一个比较通用的代码枚举 public static String getTextByValue(Integer value) { retu...
    99+
    2019-10-31
    java教程 java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作