ES6 中 Symbol 怎么用?示例详解

这篇具有很好参考价值的文章主要介绍了ES6 中 Symbol 怎么用?示例详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。

ES6 中 Symbol 怎么用?示例详解,# Javascript理论与实践,es6,ecmascript,大剑师,symbol

No. 内容链接
1 Openlayers 【入门教程】 - 【源代码+示例300+】
2 Leaflet 【入门教程】 - 【源代码+图文示例 150+】
3 Cesium 【入门教程】 - 【源代码+图文示例200+】
4 MapboxGL【入门教程】 - 【源代码+图文示例150+】
5 前端就业宝典 【面试题+详细答案 1000+】

ES6 中 Symbol 怎么用?示例详解,# Javascript理论与实践,es6,ecmascript,大剑师,symbol


ES6 中 Symbol 怎么用?示例详解,# Javascript理论与实践,es6,ecmascript,大剑师,symbol

一、ES6 Symbol 基本介绍

Symbol 是 ECMAScript 6 引入的一种新的原始数据类型,它是不可变且唯一的。 这意味着每次调用 Symbol() 函数都会创建一个独一无二的值,即使传入相同的描述符也是如此。

// 创建 Symbol
let sym1 = Symbol('description1'); // description1仅为描述信息,不影响符号的唯一性
let sym2 = Symbol('description1');
console.log(sym1 === sym2); // 输出: false

// typeof检查
console.log(typeof sym1); // 输出: "symbol"

代码示例:

// 创建Symbol
let id = Symbol();
let myObj = {};
myObj[id] = 'This is a unique value';
console.log(myObj[id]); // 输出: "This is a unique value"

// 描述符
let symWithDesc = Symbol('description');
console.log(symWithDesc.description); // TypeError: Cannot read property 'description' of a non-object

// Symbol.keyFor() 方法查找已注册的 Symbol 类型的键
let globalSym = Symbol.for('globalKey');
console.log(Symbol.keyFor(globalSym)); // 输出: "globalKey"

// 注意,Symbol.for() 会查找全局 Symbol 注册表,确保同一描述符的 Symbol 在全局范围内是唯一的
let anotherGlobalSym = Symbol.for('globalKey');
console.log(anotherGlobalSym === globalSym); // 输出: true

二、使用场景

  1. 唯一标识符:由于 Symbol 值的唯一性,常常被用来作为对象的唯一属性名,防止属性冲突。
let myPrivateProp = Symbol('private');
class MyClass {
  constructor(value) {
    this[myPrivateProp] = value;
  }

  get secretValue() {
    return this[myPrivateProp];
  }
}
  1. 模块系统:在某些模块系统或库中,Symbol 可用于创建私有或隐式接口。

  2. Map和Set键:Symbol 可以作为 Map 和 Set 的键,这样就不会与其他数据类型的键产生冲突。

  3. 内置 Symbol:ES6 提供了一些内置的 Symbol 值,如 Symbol.iterator 用于对象的迭代器方法。

let arr = ['a', 'b', 'c'];
let iterator = arr[Symbol.iterator]();
console.log(iterator.next().value); // 输出: 'a'

三、用途总结

Symbol 主要用于解决命名冲突的问题,特别是在编写大型应用或库时,可以帮助开发者避免无意间覆盖或访问到对象的内部属性。同时,它也为 JavaScript 提供了一种实现私有属性的间接途径。文章来源地址https://www.toymoban.com/news/detail-855723.html

到了这里,关于ES6 中 Symbol 怎么用?示例详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaScript解析】ES6定义变量与箭头函数详解

    箭头函数可以说是ES6的一大亮点,使用箭头函数,可以简化编码过程,使代码更加的简洁 本文由千锋前端老师独家创作,主要给大家介绍了关于ES6中箭头函数的相关资料,文中通过实例代码介绍的非常详细,觉得有帮助的话可以【关注】持续追更~ 我们现在知道定义(声明)一个变

    2024年02月05日
    浏览(48)
  • ES6类-继承-Symbol-模版字符串

    目录 类  继承 ES5 如何继承 ES6继承 Symbol 用途 可以产生唯一的值,独一无二的值 解决命名冲突 getOwnPropertySymbols()  作为全局注册表 缓存  Symbol.for()  消除魔术字符串  模版字符串 在javascript语言中,生成实例对象使用构造函数;ES6提供了类Class这个概念,作为对象的模板。定

    2024年02月16日
    浏览(50)
  • Vue报错 Cannot find module ‘../../modules/es6.symbol‘解决办法

    在进行webpack打包的时候,会出现Cannot find module \\\'XXX’的错误,找不到某个模块的错误,今天给出解决方法: 直接进行npm install重新打包; 如果npm install重新打包之后,仍然出现这个问题,可以进行删除node_modules文件夹,同时清除缓存,如下命令: 如果以上方法依然不奏效,那

    2024年01月18日
    浏览(65)
  • 【JavaScript】数组方法 (ES6)

    arr.find(callback) 用于获取第 1 个符合要求的元素: callback : (item, index, arr) = boolean item -当前值、 index -当前索引、 arr -当前数组 返回值: callback 第一次返回 true 的对应 item ;如果没有符合的元素,则返回 undefined arr.findIndex(callback) 用于获取第 1 个符合要求的元素的下标: cal

    2024年02月14日
    浏览(59)
  • JavaScript ES6实现继承

    1 对象的方法补充 2 原型继承关系图 3 class方式定义类 4 extends实现继承 5 extends实现继承 6 多态概念的理 function 创建的名称如果开头是大写的,那这个创建的不是函数,是创建了类。 可以把class创建的类当做是function创建的类的一种语法糖。但是在直接使用的方面是有不同之处

    2024年02月16日
    浏览(48)
  • JavaScript 之 ES6 新特性

    在ES6中,模块化成为了JavaScript的标准特性。ES6模块化提供了一种更加优雅和可维护的方式来组织和管理JavaScript代码,可以有效地避免全局变量的污染和命名冲突的问题。以下是ES6模块化的一些主要特性: 导出(export): 可以通过 export 将一个变量、函数或类导出为一

    2024年02月07日
    浏览(49)
  • JavaScript Es6_3笔记

    了解构造函数原型对象的语法特征,掌握 JavaScript 中面向对象编程的实现方式,基于面向对象编程思想实现 DOM 操作的封装。 了解面向对象编程的一般特征 掌握基于构造函数原型对象的逻辑封装 掌握基于原型对象实现的继承 理解什么原型链及其作用 能够处理程序异常提升程

    2024年02月11日
    浏览(51)
  • JavaScript版本ES5/ES6及后续版本

    Brendan Eich在短短10天内创建了JavaScript的第一个版本。它被称为摩卡,但已经具备了现代JavaScript的许多基本特性! 为了吸引Java开发人员,Mocha先是更改为LiveScript,然后又更改为JavaScript然而,JavaScript与Java几乎没有任何关系; 微软推出了IE,从网景复制JavaScript,并称之为JScript; 由

    2024年02月13日
    浏览(48)
  • JavaScript:ES6中类与继承

    在JavaScript编程中,ES6引入了一种更现代、更清晰的方式来定义对象和实现继承,那就是通过类和继承机制。本文将以通俗易懂的方式解释ES6中类与继承的概念,帮助你更好地理解和应用这些特性。 1. 类的创建与使用 类是一种模板,用于创建对象。在ES6中,我们可以使用 cl

    2024年02月13日
    浏览(44)
  • JavaScript之ES6高级语法(一)

    本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 今天学习的主要是关于ES6新语法知识的理解和应用 栈负责存放简单数据类型,堆负责存放复杂数据类型,但是复杂数据类型会把内容存在

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包