当前位置: 首页 > 编程笔记 >

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

戈嘉慕
2023-03-14
本文向大家介绍ES6新特性之Symbol类型用法分析,包括了ES6新特性之Symbol类型用法分析的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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类型用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ES6中的Symbol类型。分享给大家供大家参考,具体如下: Symbol是在ES6中新加入的类型。 正如我们所知,JavaScript中有以下几种类型: Undefined ,Null ,Boolean ,Number ,String, Objec

  • 本文向大家介绍es6新特性之 class 基本用法解析,包括了es6新特性之 class 基本用法解析的使用技巧和注意事项,需要的朋友参考一下 javaScript 语言中,生成实例对象的传统方法是通过构造函数,与传统的面向对象语言(比如 C++ 和 Java)差异很大,ES6 提供了更接近传统语言的写法,引入了 class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。 es6

  • 本文向大家介绍ES6(ECMAScript 6)新特性之模板字符串用法分析,包括了ES6(ECMAScript 6)新特性之模板字符串用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ES6(ECMAScript 6)新特性之模板字符串用法。分享给大家供大家参考,具体如下: ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings)。除了使用反撇

  • 根据规范,对象的属性键只能是字符串类型或者 Symbol 类型。不是 Number,也不是 Boolean,只有字符串或 Symbol 这两种类型。 到目前为止,我们只见过字符串。现在我们来看看 Symbol 能给我们带来什么好处。 Symbol “Symbol” 值表示唯一的标识符。 可以使用 Symbol() 来创建这种类型的值: // id 是 symbol 的一个实例化对象 let id

  • 箭头函数和词法this(Arrows and Lexical This) JS中可以使用一些箭头符号语法: <!-- 单行注释 --> “趋向于”操作符,语义为goes to <= 小于等于 => ES6引入的箭头,用于函数简写 本节说明ES6中新引入的箭头(=>)语法的使用。箭头函数是使用=>符号语法表示的函数简写,和C#,Java 8中的语法类似。箭头同时支持表达式和声明体。 下面分别使用ES

  • 我们前面介绍了ES6新引入的特性,当然关于这些语法糖本身实际效用的讨论也一直在进行中,也并没有统一的体验标准,你觉得甜的东西,别人觉得膩。 我们推崇简单实用,当产品或项目开发中的确需要解决一些现存问题时,看看新特性是否能帮助到你,而不是为了用而用,带来不必要的学习维护成本。 这里列出一个参考建议,用户可以根据自己的实践来得出自己的结论: ★★★ 推荐使用 ★★ 有考虑地使用 ★ 慎重地使用 ☆ 不

  • 本文向大家介绍PHP5.5新特性之yield理解与用法实例分析,包括了PHP5.5新特性之yield理解与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP5.5新特性之yield理解与用法。分享给大家供大家参考,具体如下: yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开

  • 本文向大家介绍ES6中let 和 const 的新特性,包括了ES6中let 和 const 的新特性的使用技巧和注意事项,需要的朋友参考一下 在javascript中,我们都知道使用var来声明变量。javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量。本文给大家介绍ES6中let 和 const 的特性,具体内容如下所示: let的特性: 1.不存在变量提