后盾人JS -- 好用的 JavaScript Symbol 类型

devtools/2025/1/20 11:15:41/

Symbol使用场景介绍

举个例子,当leader让你去机房取某个电脑的时候,机房那么多电脑,你怎么知道取哪个

所以这个时候symbol的作用就显现出来了(上面有什么贴纸的,什么型号的电脑)

声明定义Symbol的几种方式

两个symbol定义完之后比较是不会相等的

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let hd = Symbol()console.log(typeof hd)let edu = Symbol("后盾人在线教程")   //添加描述console.log(hd.description)     //打印描述let cms = Symbol.for("hdcms")   //这样定义系统会有记录console.log(cms)     //这时候再定义判断就是相等的console.log(Symbol.keyFor(cms))     //可以获取到描述</script>
</body>
</html>

使用Symbol解决字符串耦合问题

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let grade = {李四:{js:100,css:89},李四:{js:35,css:56}}console.log(grade)</script>
</body>
</html>

这种情况下只会打印出一个,可以用symbol解决这个问题(注意赋值和取值都要加[ ])

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let user1 = {name:'李四',key:Symbol()} let user2 = {name:'李四',key:Symbol()}let grade = {[user1.key]:{js:100,css:89},[user2.key]:{js:35,css:56}}console.log(grade)</script>
</body>
</html>

Symbol在缓存容器中的使用

symbol本质上就是生成一个永远不会重复的字符串

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>class Cache{static data = {}static set(name,value){return(this.data[name]=value)}static get(name){return this.data[name]}}Cache.set('hdcms','houdunren.com')console.log(Cache.get("hdcms"))let user = {name:'apple',desc:"用户资料",key:Symbol("用户数据")}let cart = {name:'apple',desc:"购物车",key:Symbol("购物车数据")}// Cache.set("user-apple",user)// Cache.set("cart-apple",cart)// console.log(Cache.get("user-apple"))Cache.set(user.key,user)Cache.set(cart.key,cart)console.log(Cache.get(user.key))</script>
</body>
</html>

扩展特性与对象属性保护

这是一些特性:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let symbol = Symbol("这是一个symbol类型")let hd = {name:"后盾人",[symbol]:"houdunren.com0"}for(const key in hd){console.log(key)    //遍历不到,只能遍历到普通属性}for(const key of Object.getOwnPropertySymbols(hd)){console.log(key)        //只能遍历到symbol属性}for(const key of Reflect.ownKeys(hd)){console.log(key)        //可以遍历所有属性}</script>
</body>
</html>

根据这些特性可以保护私有属性

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>let site = Symbol("这是一个symbol")class User{constructor(name){this.name = namethis[site] = "后盾人"}getName(){return `${this[site]} ${this.name}`}}let zs = new User('张三')// console.log(zs.getName())for(const key in zs){console.log(key)}</script>
</body>
</html>

玉面手雷王:


http://www.ppmy.cn/devtools/152068.html

相关文章

springboot基于微信小程序的智慧小区管理系统

Spring Boot基于微信小程序的智慧小区管理系统是一种集信息化、智能化于一体的现代小区管理工具。它充分利用Spring Boot框架的高效性和微信小程序的便捷性&#xff0c;为小区居民、物业管理人员以及服务提供者提供了一个全面、高效、易用的管理平台。 一、系统背景与意义 随…

深度学习项目--基于LSTM的火灾预测研究(pytorch实现)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 LSTM模型一直是一个很经典的模型&#xff0c;这个模型当然也很复杂&#xff0c;一般需要先学习RNN、GRU模型之后再学&#xff0c;GRU、LSTM的模型讲解将…

Python学习之旅:入门阶段(七)数据结构

在 Python 编程的学习过程中&#xff0c;数据结构就像是一个个特殊的容器&#xff0c;我们用它们来存储和组织数据。不同的数据结构有不同的特点和用途&#xff0c;就好比生活中的不同容器&#xff0c;有的适合装液体&#xff0c;有的适合装固体。掌握好数据结构&#xff0c;能…

springboot基于微信小程序的传统美食文化宣传平台小程序

Spring Boot 基于微信小程序的传统美食文化宣传平台 一、平台概述 Spring Boot 基于微信小程序的传统美食文化宣传平台是一个集传统美食展示、文化传承、美食制作教程分享、用户互动交流以及美食相关活动推广为一体的综合性线上平台。它借助 Spring Boot 强大的后端开发框架构…

C++ 之多线程相关总结

C 之多线程相关总结 1.多线程相关基础知识 1.1 线程的创建和管理 1. std::thread 类&#xff1a; 用于创建和管理线程。通过将可调用对象&#xff08;如函数、函数对象、lambda 表达式&#xff09;作为参数传递给 std::thread 的构造函数&#xff0c;可以创建一个新的线程。…

详解构造函数和析构函数

⼀个类&#xff0c;我们不写的情况下编译器会默认⽣成以下6个默认成员函数。 下面我们详细介绍的是构造函数和析构函数&#xff0c;它们的主要作用分别是初始化工作和清理工作。 构造函数 1、构造函数的概念 构造函数虽名里带着“构造”但是其实际上并不是说开辟空间创建对…

多种 Docker 镜像拉取解决方案与实践

最近国内 Docker 镜像拉取不太通畅&#xff0c;尝试了几种镜像拉取的方式&#xff0c;写篇博客分享一下。 原以为只是 docker hub 被毙了&#xff0c;上机器一操作&#xff0c;官方的下载地址也被毙了&#xff0c;真是从源头解决问题。 不过还好目前还有其他源能用&#xff0…

jenkins-Job构建

一. 简述&#xff1a; 通过 Jenkins Job&#xff08;也称为 Jenkins 项目或任务&#xff09;&#xff0c;可以定义和执行各种构建、测试和部署操作。以下是关于如何创建和配置 Jenkins Job 的详细指南&#xff0c;以及一些常见的任务类型和最佳实践。 二. 关于jenkins job&…