首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前端第七种数据类型 Symbol

前端第七种数据类型 Symbol

作者头像
舒克
发布于 2021-05-11 02:31:33
发布于 2021-05-11 02:31:33
8650
举报

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。


由于每一个 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。

在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中。


Symbol 作为属性名,该属性不会出现在for...in、for...of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。

但是,它也不是私有属性,有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol 属性名。

扩展:除了以上第七种数据类型 Symbol方法,还有属性名的遍历Symbol.for(),Symbol.keyFor() 模块的 Singleton 模式 内置的 Symbol 值等。我们以后会给大家再聊聊这些使用方法。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 迈向前端工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6——Symbol
ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。
羊羽shine
2019/07/18
4920
ES6 Symbol实战
如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。
IMWeb前端团队
2019/12/03
4400
ES6之symbol
为什么需要使用Symbol 考虑到以下场景: // a library var L = (function() { var prop1 = 'prop1'; function haha() { console.log('world haha'); } // ... return { prop1 : prop1, haha : someFn }; })(); // using L.haha = function() { console.
糊糊糊糊糊了
2018/05/09
5730
ES6之Symbol
Symbol.for() 接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建一个以该字符串为名称的 Symbol 值,并将其注册到全局。 Symbol.for()与Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。 Symbol.for()会生成一个全局的Symbol,会和之前for生成的Symbol进行覆盖,所以他们是相等的,参见Demo。
19组清风
2021/11/15
3160
Symbol 需要知道的知识点
Symbol 是 ES6 新增的基本数据类型--符号,它具有唯一性、不可变性。因此能确保对象属性的唯一性,不会发生冲突。
前端黑板报
2022/06/13
2410
Symbol 需要知道的知识点
ES6笔记(4)-- Symbol类型
类似字符串String的声明方式 var str = 'str'; Symbol的声明方式类似,它调用构造函数Symbol()
书童小二
2018/09/03
4220
ES6笔记(4)-- Symbol类型
Ecmascript语法之Symbol
Symbol 概述 作为属性名的Symbol 实例:消除魔术字符串 属性名的遍历 Symbol.for(),Symbol.keyFor() 实例:模块的 Singleton 模式 内置的Symbol值 概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是ES6引入Symbol的原因。 E
xiangzhihong
2018/02/06
1.3K0
ES6之symbol
ES6引入了一种新的原始数据类型Symbol,是第七种数据类型,表示独一无二的值。语法:
wade
2020/04/24
3260
前端测试题: 下列数据结构中,不能被for...of遍历的是?
ES6 借鉴 C++、Java、C# 和 Python 语言,引入了for...of循环,作为遍历所有数据结构的统一的方法。
舒克
2020/03/25
2.4K0
前端测试题: 下列数据结构中,不能被for...of遍历的是?
JavaScript 学习-25.Symbol 类型
前言 Symbol 是 ES6 中新添加的特性,生成一个唯一标识符,可用于属性名称、也可用于属性值。目的是消除属性名称冲突。 Symbol 简介 JavaScript 提供了7种基本数据类型:Number 、 String 、 Boolean 、 Object、 null 和 undefined ,还有 Symbol Symbol 是原始数据类型,不是对象,所以Symbol 函数栈不能用 new 命令 创建一个Symbol值 let s = Symbol('hello'); Symbol() 函数接受一个可
上海-悠悠
2022/05/26
3150
ECMAScript 6笔记(Symbol, Proxy 和 Reflect)
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/51378330
空空云
2018/09/27
5300
es6 Symbol
1.Symbol 值通过Symbol 函数生成,凡是属性名属于Symbol 类型,就是   独一无二的,可以保证不会与其他属性名冲突。       // 没有参数的时候     let s1 = Symbol();     let s2 = Symbol();     s1 === s2; // false       // 有参数的情况     let s1 = Symbol('foo');     let s2 = Symbol('foo');     s1 === s2 // false 2.作为属性
用户1197315
2018/01/19
7260
Symbol
Symbol.png Symbol 概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突 Symbol的引入,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突 它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object) Symbol函数前不能使用new命令,否则会报错 Symbol 值不是对象,所以不能添加属性 Symbol 值不能与其他类型的值进行运
李才哥
2021/02/23
8410
Symbol
一文搞清楚ES6新增数据结构 Symbol Map WeakMap Set WeakSet
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
虎妞先生
2022/10/27
3690
JS高阶(二)Symbol
ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
DioxideCN
2022/08/05
8050
ES6: 符号类型
Symbol.hasInstance(obj): 判断obj是不是当前函数的实例,如ArraySymbol.hasInstance; 可以通过以下代码改变instanceof的默认行为: Object.defineProperty(MyObject, Symbol.hasInstance, {
宅蓝三木
2024/10/09
700
JS Advance --- ES6语法(二)
在ES6之前,如果我们想要将字符串和一些动态的变量(标识符)拼接到一起,是非常麻烦和丑陋的
玖柒的小窝
2021/10/09
1.3K0
JS面试之对象(2)
new的作用: 1.创了一个新对象; 2.this指向构造函数; 3.构造函数有返回,会替换new出来的对象,如果没有就是new出来的对象
火狼1
2019/04/17
7470
JS面试之对象(2)
【JS】676- 1.1w字 | 初中级前端 JavaScript 自测清单 - 2
前言 在《初中级前端 JavaScript 自测清单 - 1》部分中,和大家简单过了一遍 JavaScript 的一些基础知识,没看过的朋友可以回顾一下? 本系列文章是我在我们团队内部的“「现代 Ja
pingan8787
2020/08/11
1.2K0
【JS】676- 1.1w字 | 初中级前端 JavaScript 自测清单 - 2
Yet Another Intro for Symbol
First of all, symbol is a built-in primitive type. And it's guaranteed to be unique. Symbols are often used to add unique property keys to an object won't collide with keys that any other code might add to the object. And the properties under the Symbol key are hidden from any mechanisms other code will typically use to access the object(like for...in, for...of, Object.keys, Object.getOwnPropertyNames and JSON.stringify etc.), but can be accessed by Object.getOwnPropertySymbols and Reflect.ownKeys (which will return both string and symbol keys).
^_^肥仔John
2021/12/01
5910
相关推荐
ES6——Symbol
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档