首页 > 其他分享 >基本数据类型Symbol

基本数据类型Symbol

时间:2023-06-25 11:34:08浏览次数:29  
标签:基本 console log s2 Symbol 数据类型 let s1

参考https://blog.csdn.net/darabiuz/article/details/121962153

Symbol的方法

Symbol()每次被调用都会生成一个新的Symbol,写法没有登记机制,所以每次调用都会返回一个不同的值

Symbol.for()不会每次调用就返回一个新的Symbol,而是会先检查给定的key是否已经存在,如果不存在,则会在全局创建并注册这个key,然后才会新建一个Symbol值

Symbol.keyFor()方法返回一个已经登记的Symbol类型值的key

// Symbol()
let s1 = Symbol('s')
let S2 = Symbol('s')
console.log(s1)//Symbol(s)
console.log(s2)//Symbol(s)
console.log(s1 === s2)//false

//Symbol.for()
let s1 = Symbol.for('s')
let s2 = Symbol.for('s')
console.log(s1)//Symbol(s)
console.log(s2)//Symbol(s)
console.log(s1 === s2)//true

//Symbol.keyFor()
let s1 = Symbol('s')
let s2 = Symbol.for('s')
Symbol.keyFor(s1)//undefined
Symbol.keyFor(s2)//s

作用

1、避免重复命名问题
2、消除魔术字符串(代码中多次出现,与代码形成强耦合的某一字符串或数值)
3、为对象定义一些非私有的、但又希望只用于内部的方法。

1、避免重复命名问题

定义Symbol类型的变量时,由于Symbol是唯一的所以可以避免重复命名

Symbol()的参数只是表示对于当前Symbol值得描述,因此相同参数的Symbol的返回值是不相等的

let s1 = Symbol('foo')
let S2 = Symbol('foo')
console.log(s1)//Symbol(foo)
console.log(s2)//Symbol(foo)
console.log(s1 === s2)//false

2、消除魔术字符串

个人理解

//平时
function test(val){
    if(val == 'tmd'){
       console.log("我是业务逻辑")
     }
}
test('tmd')//我是业务逻辑


//Symbol(错误示范)
function test(val){
    if(val == Symbol('tmd')){
       console.log("我是业务逻辑")
     }
}
test(Symbol('tmd'))//undefined 


//Symbol(正确示例,消除魔法字符串)
let temp = Symbol('tmd')
function test(val){
    if(val == temp){
       console.log("我是业务逻辑")
     }
}
test(temp)//我是业务逻辑

3、为对象定义一些非私有的、但又希望只用于内部的方法。

let name=Symbol('name');
let obj={
  [name]:'lnj',
    age:12,
    teacher:'wyx'
}
for(let key in obj){
    console.log(key)   //只能打印出age和teacher
}
//这个方法可以单独取出Symbol(name)
console.log(Object.getOwnPropertySymbols(obj))

标签:基本,console,log,s2,Symbol,数据类型,let,s1
From: https://www.cnblogs.com/9zhe/p/17502501.html

相关文章

  • python入门(三):变量和数据类型
    变量和数据类型指南原文|大纲|首页在Python中,变量用于存储数据,并且每个变量都有一个特定的数据类型。了解变量和数据类型是学习Python编程的基础。变量变量是用来存储数据的容器。在Python中,你可以通过给变量赋值来创建一个变量。变量的命名规则如下:变量名只能包含字......
  • [QML]从零开始QML开发(二)QML开发,浅谈控件、槽函数、锚等基本概念。QML和C++怎么交互?贯
    [QML]从零开始QML开发(二)QML开发,浅谈控件、槽函数、锚等基本概念。QML和C++怎么交互?贯彻落实MVC原则先看代码:importQtQuick2.12importQtQuick.Window2.12importQtQuick.Controls2.5Window{visible:truewidth:320height:480title:qsTr("HelloW......
  • Android显示系统-基本概念梳理
    DisplayStatestructDisplayState{//这里定义了Display变更类型,说明Display可能发生的变化类型enum{eSurfaceChanged=0x01,eLayerStackChanged=0x02,eDisplayProjectionChanged=0x04,eDisplaySizeChanged=0x08,......
  • pg基本基本概念——模式、表、空间、用户间的关系
    表空间用于定义数据库对象在物理存储设备上的位置,不特定于某个单独的数据库。数据库是数据库对象的物理集合,而schema则是数据库内部用于组织管理数据库对象的逻辑集合,schema名字空间之下则是各种应用程序会接触到的对象,比如表、索引、数据类型、函数、操作符等。角色(用户)则是......
  • Mysql-基本体系
    Mysql的体系结构概览1.1逻辑架构图整个MySQLServer由以下组成ConnectionPool:连接池组件ManagementServices&Utilities:管理服务和工具组件SQLInterface:SQL接口组件Parser:查询分析器组件Optimizer:优化器组件Caches&Buffers:缓冲池组件Pluggab......
  • PostgreSQL BTree(B-Link-tree) 索引 基本 实现原理
    文章目录背景BTreeB+TreeB-Link-Tree基本数据结构的插入实现BTreeInsert实现B+TreeInsert实现PostgreSQLBTree实现整体结构BTree索引创建实现_bt_buildadd_bt_uppershutdownBTree查询_bt_search实现BTree插入_bt_doinsert实现_bt_split节点分裂_bt_insert_parentlef......
  • SpringCloud Alibaba入门2-common模块和user模块的基本开发
    我们使用上一章节的项目环境进行开发。https://blog.51cto.com/u_13312531/6536187一、父项目引入SpringBoot我们在父项目pom文件中统一管理引入的jar包的版本。我们采用父项目中以depencyMangement方式引入spring-boot,子项目依赖parent父配置即可。<?xmlversion="1.0"encoding="......
  • Vue 基本认识二:使用 Vue CLI 的 Vue 项目
    注意VueCLI(手脚架)创建项目需要安装Node.js,没安装的看这里。使用VueCLI创建与运行项目,看这里。VueCLI创建的项目文件夹和文件说明,看这里。 单文件组件定义和引入  render函数......
  • xxl-job基本使用
    xxl-job-admin(调度中心)搭建dockerarm64架构镜像构建由于官方没有构建arm64架构的docker镜像,只好自己构建了,下面是详细步骤。下载源码进行构建,下载地址构建jar包,进入xxl-job-admin模块根目录mvnpackage-Dmaven.test.skip=true在xxl-job-admin模块根目录已经写好......
  • mongodb-crud基本操作
    删库>db.dropDatabase()创建集合(表)>db.createCollection('a')>db.createCollection('b')直接插入文档,集合会自动创建>db.c.insert({username:'mongodb'})>showcollections删除集合>db.a.drop()重命名集合>db.b.renameCollec......