ES6中新增的基本数据类型----symbol

 前言

Symbol 基本数据类型 独一无二得值  Symbol函数创建 接收字符串 对symbol值得描述
let s1 = Symbol('描述')

/*** symbol 基本数据类型 表示独一无二的值 Symbol函数创建独一无二得值 参数可以是唯一值得描述*/
let sy1 = Symbol();//创建好一个独一无二得值
let sy2 = Symbol();
console.log(sy1,sy2)
console.log(sy1 === sy2);
console.log(typeof sy1,sy1 instanceof Object);let sy1 = Symbol('symbol数据类型');//对独一无二值得描述
let sy2 = Symbol({name:'zhangsan'})
let sy3 = Symbol([1,2,3]);
let sy4 = Symbol(null);
console.log(sy1,sy2,sy3,sy4);

应用:

  1.解决命名冲突

  无法直接访问 Object.getOwnProperSymbols(); 得到存放symbol属性名数组
  let res = Object.getOwnProperSymbols();//[Symbol('name'),Symbol('age')]
  obj[res[0]]

/*** Symbol应用* 1.解决命名冲突 */
let sy1 = Symbol('name');
let sy2 = Symbol('age');
let obj = {name:'zhangsan',age:12,[sy1]:'terry',[sy2]:18,[Symbol('email')]:'xxx@briup.com'
};
//为了访问Symbol创建属性 
console.log(Object.getOwnPropertySymbols(obj));
var ss = Object.getOwnPropertySymbols(obj);//[ Symbol(name), Symbol(age), Symbol(email) ]
console.log(obj[ss[0]],obj[ss[1]]);console.log(obj[Symbol('email')]);//无效 undefined
console.log(obj[sy1]);//可以访问属性
console.log(obj[sy2]);
// 遍历对象 使用symbol值创建属性无法遍历 
for(let key in obj){console.log(key)
}
   2.消除魔术字符串 

      代码对于字符串依赖关系强,形成强耦合 形成魔术字符串

/** * 2.消除魔术字符串 代码对字符串依赖性非常强 形成强耦合关系 形成了魔术字符串*/
function Area(shape,options){let area = 0;switch(shape){case 'triangle':area = options.width * options.height * 0.5;break;case 'square':area = options*width * options.height;break;case 'circle':area = Math.PI * options.r * options.r;break;default:area = -1;}return area;
}
let res = Area('triangle',{width:100,height:100,r:50});
console.log(res);function Area(shape,options){let area = 0;switch(shape){case Shape.SJX:area = options.width * options.height * 0.5;break;case Shape.ZFX:area = options.width * options.height;break;case Shape.CIRCLE:area = Math.PI * options.r * options.r;break;default:area = -1;}return area;
};
// 枚举 类型可以罗列出来 性别:男 女 
let Shape = {SJX:Symbol('三角形'),ZFX:Symbol('正方形'),CIRCLE:Symbol('圆')
}let res = Area(Shape.ZFX,{width:100,height:100,r:50});
console.log(res);
  3.全局注册表 

    可以使用Symbol.for全局注册一个Symbol值  
    Symbol.for('hello');
    Symbol.for('hello');
    
    Symbol.keyFor 检测Symbol有没有全局注册过 注册过返回Symbol值得描述或者undefined

 

/*** 全局注册表 Symbol.for*/
// 可以创建一个symbol值的时候进行全局注册 
let sy1 = Symbol.for('name');
let sy2 = Symbol.for('name');
console.log(sy1 === sy2);let sy3 = Symbol('age');
let sy4 = Symbol('age');
console.log(sy3 === sy4);// Symbol.keyFor 检测symbol值有没有在全局注册过 注册过返回symbol值得描述 没有返回undefined
console.log(Symbol.keyFor(sy1));
console.log(Symbol.keyFor(sy2));
console.log(Symbol.keyFor(sy3));
console.log(Symbol.keyFor(sy4));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EXP-00056: 遇到 ORACLE 错误 12154 ORA-12154: TNS: 无法解析指定的连接标识符

exp oas/oasoas filed:\daochu.dmp owner(s) 导出特定用户 //exp 用户名/密码数据库 filed:\daochu.dmp owner(用户名) 1.重启oracle监听 cmd 中输入 services.msc 找到服务:OracleOraDb10g_home1TNSListener 与 OracleServiceORCL。 把两个服务启动. 若未解决…

Vue 3 + Tailwind CSS:打造现代化项目的完美组合

Vue 3 Tailwind CSS:打造现代化项目的完美组合 本篇教程将向你介绍如何将 Tailwind CSS 与 Vue 3 项目搭配使用,为你的项目提供现代化的 UI 呈现和开发体验。通过本文的逐步演示和示例代码,你将很快掌握在 Vue 3 中集成和使用 Tailwind CSS…

SCI一区级 | Matlab实现GWO-CNN-BiLSTM-selfAttention多变量多步时间序列预测

SCI一区级 | Matlab实现GWO-CNN-BiLSTM-selfAttention多变量多步时间序列预测 目录 SCI一区级 | Matlab实现GWO-CNN-BiLSTM-selfAttention多变量多步时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GWO-CNN-BiLSTM-selfAttention灰狼算法优化卷…

IntelliJ idea卡顿解决,我遇到的比较管用的方案

Setttings> Build, Execution,Deployment>Debugger> Data Views> Java 取消 Enable "toString()" object view; Speed up debugging in IntelliJ Yesterday, I observed painfully slow debugging in IntelliJ. Every step over or step in took almost…

【力扣】234.回文链表2

234.回文链表2 感觉自己还是有点时间,然后又学了两种解法。那就一起整理一下。 法一:反转链表后比较 题解看我的这一篇就行(click) 法二:数组双指针 思路很简单,就是用while循环遍历一下整个链表将对应的值复制到…

2023年12月8日:UI登陆界面

作业 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QPushButton> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpub…

GO语言开始

GO语言开始 下载windows版本安装后查看 是否安装成功下载GO的集成开发工具第一个GO程序 Go官网地址&#xff1a;https://golang.org/ Go 官方镜像站&#xff08;推荐&#xff09;:https://golang.google.cn/dl/ 下载windows版本 安装后查看 是否安装成功 下载GO的集成开发工具…

鸿蒙原生应用开发【分布式数据对象】

01、什么是分布式数据对象 在可信组网环境下&#xff0c;多个相互组网认证的设备将各自创建的对象加入同一个 sessionId&#xff0c;使得加入的多个数据对象之间可以同步数据&#xff0c;也就是说&#xff0c;当某一数据对象属性发生变更时&#xff0c;其他数据对象会检测到这…

前端知识笔记(三十七)———Django与Ajax

特点&#xff1a; 异步提交 局部刷新 例子&#xff1a;github注册 动态获取用户名实时的跟后端确认并实时的展示到前端&#xff08;局部刷新&#xff09; 朝后端发送请求的方式 1.浏览器地址栏直接输入url回车 -----》get请求 2.a标签的href属性 -----》get请求 3…

pcl-3 pcl结合opencv做svm分类(法向量特征数据)

后续使用了fpfh特征作为训练数据&#xff0c;遇到了一些困难 首先是flann冲突&#xff0c;这个将opcv中的flann都改成了flann2就可以运行 后面在将得到的33特征值进行训练的时候一直内存超限&#xff0c;传输的不太好&#xff0c;到现在还是不行&#xff0c;改了三天还是没有改…

Flink 系列文章汇总索引

Flink 系列文章 一、Flink 专栏 本专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 本专栏的文章编号可能不是顺序的&#xff0c;主要是因为写的时候顺序没统一&#xff0c;但相关的文章又引入了&#xff0c;所以后面就没有调整了&#xff0c;按照写文章的顺…

OpenCL学习笔记(三)手动编译开发库(win10+mingw64)

前言 有的小伙伴仍然在使用mingw编译器&#xff0c;这时只能重新编译opencl的sdk库。本文档简单记录下win10下&#xff0c;使用mingw11.20编译的过程&#xff0c;有需要的小伙伴可以参考下 一、安装所需软件 1.安装git&#xff0c;教程比较多&#xff0c;不再重复 2.安装cm…

chrome安装jsonview

写在前面 通过jsonview可以实现&#xff0c;当http响应时application/json时直接在浏览器格式化显示&#xff0c;增加可读性。本文看下如何安装该插件到chrome中。 1&#xff1a;安装 首先在这里 下载插件包&#xff0c;然后解压备用。接着在chrome按照如下步骤操作&#xf…

千锋 Vue 详细笔记整理

视频笔记是根据B站 千锋 涛哥 - SpringBootvue前后端分离项目《锋迷商城》实战课-完结版 进行整理的 笔记可上 gitee仓库 自取 千锋 Vue 笔记整理 一、vue 的简介1.1 使用 JQuery 的复杂性问题1.2 VUE 简介1.2.1 前端框架1.2.2 MVVM 二、 vue 入门使用2.1 vue 的引入2.2 入门案…

WPF(Windows Presentation Foundation)的 StatusBar控件

WPF&#xff08;Windows Presentation Foundation&#xff09;的 StatusBar 是一种用于显示状态栏的控件。状态栏是用于向用户提供应用程序的状态信息或其他相关信息的区域。它通常位于应用程序窗口的底部&#xff0c;并提供一些常见的功能&#xff0c;如显示进度、状态文本、通…

[C#] 基于 yield 语句的迭代器逻辑懒执行

众所周知, C# 可以通过 yield 语句来快速向 IEnumerator 或者 IEnumerable 类型的方法返回值返回一个元素. 但它还有另外一个特性, 就是其内部逻辑的懒执行. 每两个 yield 语句之间的逻辑都是一个状态, 只有在调用迭代器的 MoveNext 方法后, 才会执行下一个状态的逻辑. 在文章中…

泽攸科技二维材料转移台的应用场景及优势

随着二维材料的广泛研究和各种潜在应用的开发&#xff0c;对于二维材料样品的精密操控与转移的需求日益增加。特别是一些新型二维材料的制备和器件集成制备中&#xff0c;需要在显微镜下对样品进行观察与定位&#xff0c;并能够在微米甚至纳米量级上精确移動和转移样品。 传统…

集简云 x 零售企业丨快速集成有赞商城和微盛企微管家,实现私域运营自动化

客户介绍 某公司是一家知名的饮料厂商&#xff0c;自1998年成立以来&#xff0c;一直致力于研发和生产各种热门饮品&#xff0c;如果汁、碳酸饮料、矿泉水等。因其独特的口感和健康的品质深受消费者的喜爱。企业拥有多个知名品牌&#xff0c;享有极高的品牌知名度和市场份额。该…

BGP综合

1、使用PreVal策略&#xff0c;确保R4通过R2到达192.168.10.0/24。 2、使用AS_Path策略&#xff0c;确保R4迪过R3到达192.168.11.0/24。 3、配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24。 4、使用Local Preference策略&#xff0c;确保R1通过R2到达192.168.1.0…

Mac电脑系统管理:iStat Menus中文 for Mac

iStat Menus是一款强大而灵活的系统监控工具&#xff0c;可以帮助Mac用户实时监控和管理自己的电脑。它提供了丰富的系统状态和性能指标&#xff0c;可自定义的菜单栏图标以及历史数据记录功能&#xff0c;让用户能够全面了解和掌握电脑的运行情况。 实时系统监控&#xff1a;i…