ES6-----学习系列九(Symbol数据类型)

Symbol是es6新的数据类型。

  Symbol所声明的值是唯一的,独一无二的。永远不可能相等。Symbol.for(key) 先检查是否声明了key值  如果未声明就相当于调用Symbol  如果已经声明了 就相当于获取这个Symbol

{
  // 声明
  let a1=Symbol();
  let a2=Symbol();
  console.log(a1===a2);//false
  let a3=Symbol.for(‘a3‘);
  let a4=Symbol.for(‘a3‘);
  console.log(a3===a4);//true
}

  Symbol的使用  可以使用Symbol声明属于自己的唯一的变量  当其他继承他的也可以声明同名属性 而不会报错  注意:Symbol声明的变量for of是不能获取到的

  可以通过Object.getOwnPropertySymbols()获取Symbol变量  

  如果需要获取所有包括Symbol和非Symbol的属性  可以通过Reflect.ownKeys()来进行获取  (Reflect也是es6新增的方法,后续会进行总结)

{
  let a1=Symbol.for(‘abc‘);
  let obj={
    [a1]:‘123‘,
    ‘abc‘:345,
    ‘c‘:456
  };
  console.log(‘obj‘,obj);

  for(let [key,value] of Object.entries(obj)){
    console.log(‘let of‘,key,value);//adc  c
  }

  Object.getOwnPropertySymbols(obj).forEach(function(item){
    console.log(obj[item]);
  })

  Reflect.ownKeys(obj).forEach(function(item){
    console.log(‘ownkeys‘,item,obj[item]);
  })
}
时间: 2024-10-04 21:55:13

ES6-----学习系列九(Symbol数据类型)的相关文章

Quartz.NET学习系列(九)--- XML任务配置

Quartz.NET除了可以代码定义触发器.任务之外,还可以由XML定义这两个对象.其实Quartz.NET的理想架构是:计划管理容器作为服务器运行在服务机上,而触发器.任务的添加可通过自定义任务管理软件向服务器上添加特定的任务计划. 这时就要求数据的持久化以及服务器的容错性了,后面几篇文章将会介绍持久化以及集群相关内容. VS的XML只能提示 第一篇已经将Quartz.NET下载过来了,在路径doc/xml/文件加下可以找到job_scheduling_data_2_0.xsd vs的智能提示

MVC3+EF4.1学习系列(九)-----EF4.1其他的一些技巧的使用

上节通过一系列重构 简单的项目就实现了 不过还有些EF的功能没有讲 这节就通过项目 讲讲EF其他的功能与技巧 一.直接执行SQL语句 通常来讲 EF 不用写SQL语句的  但是 在有些场合  比如对生成的SQL语句 觉得不满意 要做优化  或者做报表统计时 要写很变态的SQL语句 再或者 批量操作等   这个时候 使用ORM的弱点就显露了出来 但是 做为优秀的ORM框架  EF 是支持原生态的SQL的   这里面 提供了三种方法 1. DbSet.SqlQuery   有跟踪状态的查询  2. 

ES6学习笔记九:修饰器

一:修饰器(Decorator)是一个函数,用来修改类的行为. 1)定义与使用 function 修饰器名(target) { //target是被修饰对象,可用target.xxx进行调用修改 } @修饰器名 class MyClass { // ... } //调用修饰器 MyClass.修饰器; 修饰器对类的行为的改变,是代码编译时发生的,而不是在运行时.这意味着,修饰器能在编译阶段运行代码. 2)带参数的修饰器 function 修饰器名(参数列表) { return function(

目标跟踪学习系列九:Struck:Structured Output Tracking with Kernels头文件代码框架

我们先来看一下整个的头文件的构成: 其中: config.h :   配置头文件,里面定义了一个类:class Config.主要定义的是特征的类型,核函数的类型等等. Features.h:定义了一个Class Features .里面定义了int 型的m_featureCount//特征计数Eigen::VectorXd m_featVec 存储特征的向量.其中使用了inline内联函数(inline 说明这个函数是内联的,在编译过程中内联函数会直接被源代码替换,提高执行效率 如果类中的某个

Castle学习系列(九)---Windsor框架快速入门

Windsor是Castle提供的一个IOC框架,使用非常简单,支持批量注册.开始快速入门 首先引用dll 两个dll版本均是最新的3.3.0.0 新建两个接口文件IPrinter(打印接口)和ICharge(收费接口) public interface IPrinter { void RegPrint(int regID); void ClinicPrint(int chargeID); } public interface ICharge { void ClinicChcarge(); }

Quartz.NET学习系列

Quartz.NET是一个开源的任务调度引擎,对于周期性的任务,持续性的任务提供了很好的支持,并支持持久化,集群等功能.一下是我这个对于Quartz.NET的学习记录: 源码下载地址http://yunpan.cn/cZcHVh7W3SB3X  访问密码d45a 由于博客编辑器的问题,部分代码可能显示不完全,可点击 这个按钮来获取完整的源码 Quartz.NET学习系列(一)--- 快速入门 Quartz.NET学习系列(二)--- 简单触发器 Quartz.NET学习系列(三)--- Cron

Python学习系列(九)(IO与异常处理)

Python学习系列(九)(IO与异常处理) Python学习系列(八)( 面向对象基础) 一,存储器 1,Python提供一个标准的模块,称为pickle,使用它既可以在一个文件中存储任何Python对象,又可以把它完整的取出来,这被称为持久的存储对象.类似的,还有一个功能与之相同的模块—cPickle,用c语言编写的,速度比pickle快1000倍. 2,示例: 1 import cPickle as p 2 shoplistfile='shoplist.data' 3 shoplist=[

ES6——Symbol数据类型

什么是 Symbol ? Symbol 表示独一无二的值,他是js中的 第七种数据类型. 基本的数据类型:null, undefined number boolean string symbol 引用数据类型:Object let s1=Symbol(); let s2= Symbol(); console.log(typeof s1); //symbol console.log(s1===s2) //false; Symbol 函数不能使用 new 否则会把错,因为 Symbol 是一个原始类

C语言快速入门系列(九)

C语言快速入门系列(九)                                               ---转载请注明出处:coder-pig C语言知识点拾遗 本节引言: C语言系列已经接近尾声了,在前面八节的学习中,我们学会了C的基本语法,基本数据类型, 三种程序结构(顺序,判断,循环),数组,函数,指针,结构体,共用体,位运算,文件等内容, 本节将对前面没有讲的C的遗漏知识点进行补充,当然发现有那些的遗漏的知识点也会进行更新! 谢谢大家一直以来的支持,说了这么多的理论,缺的

es6学习笔记初步总结

es6学习笔记初步总结 1. let.const 和 block 作用域 在ES6以前,var关键字声明变量.无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部).这就是函数变量提升例如: let 关键词声明的变量不具备变量提升(hoisting)特性 let 和 const 声明只在最靠近的一个块中(花括号内)有效 当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING const 在声明时必须被赋值 否则报语法错误SyntaxError