当前位置: 首页 > news >正文

数据类型Symbol

文章目录

  • 前言
    • 概述
    • 方法
    • 内置的symbol值
      • Symbol.hasInstance
      • Symbol.match


前言

ES5 的对象属性名都是字符串,这容易造成属性名的冲突。为了保证属性名的独一无二ES6 引入了一种新的Symbol

概述

Symbol 值通过Symbol()函数生成。
可以接受一个字符串作为参数,表示对 Symbol 实例的描述。

即使描述一样 但symbol并不会一样

let s=Symbol()
console.log(s);
//输出Symbol()let r=Symbol('123')
console.log(r);
//输出Symbol(123)let a1=Symbol('11')
let a2=Symbol('11')
console.log(a1===a2);
//输出false

描述只是让人容易区分,并其可以转换为字符串,(内部为对应描述的值)

let st=Symbol('11111')
console.log(String(st));
//输出Symbol(11111)

方法

前面提到的描述值可以通过Symbol().description获取
如下

let st=Symbol('11111')
console.log( st.description);
//输出11111

symbol用于属性名

使用【】包围

let a=Symbol(111)
const obj={}
obj[a]='123456789'
obj.a='qwesaf'
console.log(obj.a);
console.log(obj[a]);

如上,通过obj.a访问时,由于.运算符默认解析为字符串,也就有了属性名为a(String类型)的属性
而通过symbol定义的属性其属性名为a(Symbol值)a在此指代的是对应的Symbol
遍历类型为Symbol的属性名
Symbol 值作为属性名,遍历对象的时候,该属性不会出现在for…in、for…of循环中,
通过Object.getOwnPropertySymbols()可以获取所有的symbol值,返回类型为数组

let a=Symbol(111)
let b=Symbol(222)
const obj={}
obj[a]='123456789'
obj[b]='7777'
let arr= Object.getOwnPropertySymbols(obj)
console.log(arr);
//输出[ Symbol(111), Symbol(222) ]

内置的symbol值

ES6 提供了 11 个内置的 Symbol 值,指向语言内部使用的方法。

Symbol.hasInstance

对象的Symbol.hasInstance属性,指向一个内部方法。当其他对象使用instanceof运算符,判断是否为该对象的实例时,会调用这个方法。

class classa{[Symbol.hasInstance](f) {return f instanceof Array;}
}console.log([1,2,3] instanceof new classa());

其中instanceof之前的值会被后面的类的对应内部方法接收,此处被f接收

Symbol.match

对象的Symbol.match属性,指向一个函数。当执行str.match(myObject)时,如果该属性存在,会调用它,返回该方法的返回值。

class classa{[Symbol.match](s) {return (`match调用,参数是${s}`)}
}console.log('abc'.match(new classa()));

如上 match的参数是被调用的对象

http://www.dtcms.com/a/312206.html

相关文章:

  • 裸露土堆识别准确率↑32%:陌讯多特征融合算法实战解析
  • 数据结构基础
  • Minimizing Coins(Dynamic Programming)
  • 【智能体cooragent】创建 workflow 时 候选 Agent 和 Tool 获取来源详细分析
  • Python从入门到精通——第五章 列表与元组
  • 机器人学中路径规划(Path Planning)和轨迹生成(Trajectory Generation)关系
  • 海康皓视通 对接测试和比较
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第8章 备份与恢复
  • 自进化智能体综述:通往人工超级智能之路
  • 安卓自动点击器:设置点击周期 / 滑动,抢票、游戏刷日常秒会
  • UNet改进(28):KD Attention增强UNet的知识蒸馏方法详解
  • 适 配 器 模 式
  • Anthropic最新研究Persona vector人格向量
  • C语言---函数的递归与迭代
  • 第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2023年3月12日真题
  • Python从入门到精通计划Day01: Python开发环境搭建指南:从零开始打造你的“数字厨房“
  • 【语音技术】什么是实体
  • AI原生数据库:告别SQL的新时代来了?
  • 高效截图的4款工具深度解析
  • 淘宝商品API可以获取哪些商品详情数据?
  • ARM架构ELR、LR 和 ESR寄存器含义
  • Codeforces Global Round 27
  • 衡石湖仓一体架构深度解构:统一元数据层如何破除数据孤岛?
  • C++11 -- 智能指针
  • 【故障处理】redis会话连接满导致业务系统某个模块数据不显示
  • JJWT 核心工具类 Jwts 源码解析
  • 3 数字字符串格式化
  • 安灯系统(Andon System)
  • h3c路由器查看温度是否正常
  • 记录一次Spring Cloud Gateway配置的跨域处理:解决 ‘Access-Control-Allow-Origin‘ 头包含多个值的问题