ES6新特性之Symbol类型用法分析

发布时间 - 2026-01-11 00:27:43    点击率:

本文实例讲述了ES6新特性之Symbol类型用法。分享给大家供大家参考,具体如下:

Symbol类型

1. 为了避免属性名的冲突,ES6新增了Symbol类型。Symbol可以产生一个独一无二的值

let s1 = Symbol('a');
let s2 = Symbol('a');
console.log(s1); //Symbol(a)
console.log(typeof s1); //symbol
console.log(s1 == s2); //false

2.Symbol用于属性名

var s1 = Symbol();
var s2 = Symbol();
var s3 = Symbol();
var obj = {
  [s1]: 'hi'
};
obj[s2] = 'ES6';
Object.defineProperty(obj, s3, {
  value: 'ES2015'
});
console.log(obj); //Object {Symbol(): "hi", Symbol(): "ES6", Symbol(): "ES2015"}
console.log(obj.s1); //undefined -> 所以当用Symbol作为属性名时候,不能用.运算符访问属性
console.log(obj[s1]); //hi
console.log(obj['s1']); //undefined

注意:Symbol作为属性名,该属性不会出现在 for...in...和 for...of... 循环中,也不会被 Object.keys(), Object.getOwnPropertyNames() 返回。Object.getOwnProertySymbols()返回一个数组,成员是当前对象的所有用作属性名的symbol值。

2. Symbol.for() 接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值,有就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值

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

Symbol()方法生成一个Symbol类型时,没有登记,所以每次调用Symbol(哪怕传入相同的字符串)会返回不同的Symbol,但是Symbol.for()在生成Symbol时候进行了登记,每次再次调用时,都会先寻找是否有传入相同参数的Symbol,故只有Symbol.for()产生的Symbol才能被Symbol.keyFor()找到。

let s1 = Symbol('a');
let s2 = Symbol('a');
let s3 = Symbol.for('b');
let s4 = Symbol.for('b');
let name1 = Symbol.keyFor(s1);
let name3 = Symbol.keyFor(s3);
console.log(s1 == s2); //false
console.log(s1 == s3); //false
console.log(s2 == s3); //false
console.log(s3 == s4); //true
console.log(name1); //undefined
console.log(name3); //b

希望本文所述对大家ECMAScript程序设计有所帮助。


# ES6  # 新特性  # Symbol类型  # ES6中Symbol、Set和Map用法详解  # 详解ES6 Symbol 的用途  # Javascript ES6中数据类型Symbol的使用详解  # ES6中Symbol类型用法实例详解  # ES6概念 Symbol toString()方法  # ES6概念 Symbol.keyFor()方法  # ES6初步了解原始数据类型Symbol的用法  # 以该  # 出现在  # 给大家  # 不能用  # 为了避免  # 所述  # 程序设计  # 进行了  # 会先  # 无二  # 运算符  # 讲述了  # 新增了  # pre  # color  # class  # console  # brush  # js 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么上传文件_Laravel图片上传及存储配置  网站建设要注意的标准 促进网站用户好感度!  微信小程序 canvas开发实例及注意事项  深入理解Android中的xmlns:tools属性  如何在腾讯云免费申请建站?  Bootstrap整体框架之JavaScript插件架构  如何打造高效商业网站?建站目的决定转化率  如何在自有机房高效搭建专业网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何解决hover在ie6中的兼容性问题  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  php json中文编码为null的解决办法  教你用AI将一段旋律扩展成一首完整的曲子  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Laravel安装步骤详细教程_Laravel环境搭建指南  JS去除重复并统计数量的实现方法  如何快速辨别茅台真假?关键步骤解析  网站页面设计需要考虑到这些问题  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  如何在景安云服务器上绑定域名并配置虚拟主机?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  C++时间戳转换成日期时间的步骤和示例代码  如何在新浪SAE免费搭建个人博客?  详解CentOS6.5 安装 MySQL5.1.71的方法  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  java中使用zxing批量生成二维码立牌  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  如何安全更换建站之星模板并保留数据?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何撰写建站申请书?关键要点有哪些?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  WEB开发之注册页面验证码倒计时代码的实现  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  如何用西部建站助手快速创建专业网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何处理和验证JSON类型的数据库字段  如何彻底卸载建站之星软件?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南