ES6入门之Symbol

 

ES5对象属性名都是字符串容易造成属性名的冲突。

eg:var a = { name: 'lucy'};a.name = 'lili';
这样就会重写属性

ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。

重新复习下新知识:基本数据类型有6种:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。

这里新添加了一种:Symbol

注意,Symbol函数前不能使用new命令,否则会报错。这是因为生成的Symbol是一个原始类型的值,不是对象

Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

复制代码
// 没有参数的情况
var s1 = Symbol();
var s2 = Symbol();s1 === s2 // false// 有参数的情况
var s1 = Symbol("foo");
var s2 = Symbol("foo");s1 === s2 // false
复制代码

Symbol值不能与其他类型的值进行运算

作为属性名的Symbol

复制代码
var mySymbol = Symbol();// 第一种写法
var a = {};
a[mySymbol] = 'Hello!';// 第二种写法
var a = {[mySymbol]: 'Hello!'
};// 第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });// 以上写法都得到同样结果
a[mySymbol] // "Hello!"
复制代码

注意,Symbol值作为对象属性名时,不能用点运算符。

var a = {};
var name = Symbol();
a.name = 'lili';
a[name] = 'lucy';
console.log(a.name,a[name]);             //lili,lucy

Symbol值作为属性名时,该属性还是公开属性,不是私有属性。

这个有点类似于java中的protected属性(protected和private的区别:在类的外部都是不可以访问的,在类内的子类可以继承protected不可以继承private)

但是这里的Symbol在类外部也是可以访问的,只是不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()返回。但有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有Symbol属性名

Symbol.for(),Symbol.keyFor()

Symbol.for机制有点类似于单例模式,首先在全局中搜索有没有以该参数作为名称的Symbol值,如果有,就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值。和直接的Symbol就点不同了。

var s1 = Symbol.for('foo');
var s2 = Symbol.for('foo');s1 === s2 // true

Symbol.keyFor方法返回一个已登记的Symbol类型值的key。实质就是检测该Symbol是否已创建

var s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"var s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined

 

转载于:https://www.cnblogs.com/ecmasea/p/8985806.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac safari无法连接服务器_宇航员乘坐SpaceX飞船返航中iPad上Safari出现“无法连接到网络”错误...

罗伯特贝恩肯(Robert Behnken)和道格拉斯赫尔利(Douglas Hurley)在完成轨道实验室任务后,于今天搭乘 SpaceX 公司的"Crew Dragon"飞船离开国际空间站,为他们历史性的国际空间站飞行画上句号。两名宇航员在位于美国德克萨斯州休斯顿和加利福尼亚…

Vue 大量数据展示卡顿解决方案(长列表优化)

需求分析(长列表展示) 页面某处需要渲染 1w 条数据,并需要滚动展示,这时如果直接把这些数据渲染到页面上,会导致系统内存大量被占用,导致页面卡顿或崩溃 我们都知道,每次 DOM 修改,浏…

Django-admin管理工具

admin组件使用 Django 提供了基于 web 的管理工具。 Django 自动管理工具是 django.contrib 的一部分。你可以在项目的 settings.py 中的 INSTALLED_APPS 看到它: # Application definitionINSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contr…

[转]mysql的sql优化工具

原标题:DBA的五款最佳SQL查询优化工具,收藏了 一般来说,SQL查询优化器分析给定查询的许多选项,预估每个选项的成本,最后选择成本最低的选项。如果查询优化器选择了错误的计划,则性能差异可能从几毫秒到几分…

.NET 7 中的 HttpResult 接口

.NET 7 中的 HttpResult 接口Intro在前面的文章中,我们提到了 .NET 7 引入了 Endpoint Filter 来支持 Endpoint 的过滤器,有了这个接口就想着把之前的统一 API response 的 filter 改造一下支持 endpoint filter,然而这个一直等到了 .NET 7 P…

5、Hive的自定义UDF函数

2019独角兽企业重金招聘Python工程师标准>>> 1、pom.xml引入依赖及打包 <dependencies><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.1.0</version></depende…

多线程-单生产单消费模型

2019独角兽企业重金招聘Python工程师标准>>> 创建资源对象&#xff0c;提供保存和取出方法&#xff08;使用synchronized代码块实现&#xff09; /*** Created by shaoqinghua on 2018/5/3.* 定义一个负责保存和取出的资源类*/ public class Resource {/*** 定义成员…

github1s 油猴插件

github1s 是一个非常有趣的项目&#xff0c;它可以让你在 1 秒内&#xff08;俗称 1s&#xff09;通过在线版本的 VS Code 来打开 GitHub 上的代码&#xff0c;只需要在对应项目的 URL 后面加上 1s 即可。 这是一个很有创意、很赞的项目&#xff0c;只需要在对应的 GitHub 项目…

WPF-02 布局

WPF中布局控件继承Panel&#xff0c;可以实现非常复杂的布局。我们介绍一下常用的布局控件1. Grid 布局控件Grid是网格布局控件&#xff0c;在WPF开发中我们用的最多的一个布局控件&#xff0c;可以自定义行和列&#xff0c;分别设置Height和Witdh值&#xff0c;一般推荐通过比…

微信多开工具 可以同时在电脑上打开多个微信 免费开源

本程序用C#代码编写&#xff0c;运行环境FrameWork5.0以上。 主要代码&#xff1a; using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using Sys…

Linux 第十周学习笔记(2)smtp服务的部署

SMTP服务的部署介绍&#xff1a;SMTP(Simple Mail Transfer Protocol)简单邮件传输协议是一种提供可靠且有效电子邮件传输的协议。 SMTP 是建模在 FTP 文件传输服务上的一种邮件服务&#xff0c;主要用于传输系统之间的邮件信息并提供来信有关的通知。一&#xff0e;环境的部署…

关于CTeX的几个大坑

https://blog.csdn.net/zjutczj/article/details/53463478 最近一直忙着写小论文&#xff0c;毕业设计中期答辩&#xff0c;没有更新博客&#xff0c;忙过这一阵我会把这段时间学习机器学习的一些心得分享。今天分享几个刚刚使用CTeX遇到的大坑&#xff0c;希望能挽救一些还没有…

西安电子地图下载 来自谷歌电子地图库 地图展示15、17、19级

西安电子地图下载 来自谷歌电子地图库 地图展示15、17、19级 一般来说商业用图几乎相同就是17级左右&#xff0c;提供的下载全然满足大多数人浏览使用&#xff0c;假设用于旅行外出当然级数越高越好&#xff0c;假设是驴行&#xff0c;那就更有必要下载完整的地图以作不时之需。…

​Magicodes.Pay已支持Volo Abp

简介Magicodes.Pay希望打造一个统一支付库&#xff0c;相关库均使用.NET标准库编写&#xff0c;支持.NET Framework以及.NET Core。目前已提供Abp及Abp VNext模块的封装&#xff0c;支持开箱即用。主要功能目前已提供Abp&#xff08;含Abp VNext&#xff09;模块的封装&#xf…

vscode 头文件包含问题_WSL+VSCode = Linux ?

官方文档​code.visualstudio.com使用VSCode新推出的Remote功能来连接WSL或服务器进行开发. 可以在Windows上享受优秀的界面体验的同时使用Linux环境进行开发(还是要感谢无数的VSCode插件贡献者).环境基础配置Visual Studio Code最新版本注意点: 安装时需要勾选环境变量添加到p…

PerfView专题 (第十篇):洞察 C# 终结队列引发的内存泄漏

一&#xff1a;背景 C# 程序内存泄漏的诱发因素有很多&#xff0c;但从顶层原理上来说&#xff0c;就是该销毁的 用户根 对象没有被销毁&#xff0c;从而导致内存中意料之外的对象无限堆积&#xff0c;导致内存暴涨&#xff0c;最终崩溃&#xff0c;这其中的一个用户根就是 终结…

手机的小窗口怎么弄_荣耀9X如何设置桌面小工具?划重点,这个要考

为了方便手机操作&#xff0c;一些小伙伴会在手机桌面上添加天气、一键锁屏、日历等窗口小工具&#xff0c;那么问题来了&#xff01;荣耀9X这款新手机是如何添加窗口小工具呢&#xff1f;官维君今天就来给大家讲解一下方法。标准姿势看这里——第一步&#xff1a;在桌面双指头…

ASP.NET Core 同时支持多种认证方式 | Swagger 支持

前言上次&#xff0c;我们实现了《ASP.NET Core 同时支持多种认证方式》&#xff1a;services.AddAuthentication().AddDemoAuthentication(options > { }).AddJwtBearer(options >{...});我们还希望为 Swagger 也添加多种认证支持。原来为支持 JWT 认证&#xff0c;Swag…

Redis指南

一、简介 redis 和 memcached 都是高性能的键值缓存数据库服务&#xff0c;其中 memcached 支持多线程&#xff0c;而 redis 支持丰富的数据结构且能内置持久化机制。 redis 数据都是以键值形式存储的&#xff0c;键是字符串类型&#xff0c;值有 7 种类型&#xff08;本质上是…

SpringIOC之AbstractMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…