ES6新特性 Symbol 迈不过友情╰ 2022-04-23 20:02 175阅读 0赞 ## intro ## ES6中数据类型除了`Number, String, Boolean, Object, null, undefined`, 还新增了`Symbol`。 `Symbol`表示`独一无二的值`,最大的用法是**用来定义对象的唯一属性名**。 ## 基本用法 ## Symbol函数栈不能使用new命令,因为Symbol是**原始数据类型**,不是对象。 可以接受一个字符串作为参数,为新创建的Symbol**提供描述**, 用于显示在控制台或作为字符串的时候使用,便于区分。 * 作为属性名 var sy = Symbol("key1"); // 向对象添加成员 var obj1 = {}; obj1[sy] = "value1"; console.log(obj1); // {Symbol(key1): "value1"} // 对象字面量 var obj2 = { [sy]: "value2" } console.log(obj2); // Object.defineProperty(obj, attributeKey, attributes); // Object.defineProperties(obj, attributes); var obj3 = {}; Object.defineProperty(obj3, sy, {value: "value3"}); console.log(obj3); * \[\]和.的区别 **Symbol变量既可以作对象的key,也可以作对象的value**。 作为key时,必须提前定义好Symbol变量,引用的方式**只能为**:`obj[SymbolVarName]`。 var c = Symbol("c"); var d = Symbol("d"); var obj = { a: "aa", b: Symbol("bb"), [c]: "cc", [d]: Symbol("dd") }; console.log(obj); console.log(obj.a); console.log(obj.b); console.log(obj[c]); console.log(obj[d]); 输出: {a: "aa", b: Symbol(bb), Symbol(c): "cc", Symbol(d): Symbol(dd)} aa Symbol(bb) cc Symbol(dd) * Symbol NOTE Symbol值作为属性名时,该属性是公有属性,可以在类的外部访问到。 * 可以访问到Symbol类型key的操作: * `Object.getOwnPropertySymbol(obj)` * `Reflect.ownKeys(obj)` * 但是有些操作不能访问到Symbol类型的key: * `for..in` * `for..of` * `JSON.stringify(obj, null, "\t")` * `Object.keys(obj)` * `Object.getOwnPropertyName(obj)` * 作为常量 在ES6之前,使用字符串值表示常量: const COLOR_RED = "red"; const COLOR_YELLOW = "yellow"; const COLOR_BLUE = "blue"; // 但是用字符串不能保证常量是独特的,如: const MY_BLUE = "blue"; // 这样常量COLOR_BLUE和MY_BLUE值是相等的。 // 如果碰到switch..case语句,就有可能报错 console.log(COLOR_BLUE === MY_BLUE); // true 修改: (switch…case语句中判断的是`===`,即绝对相等) const COLOR_RED = Symbol("red"); const COLOR_YELLOW = Symbol("yellow"); const COLOR_BLUE = Symbol("blue"); const MY_BLUE = Symbol("blue"); console.log(COLOR_BLUE === MY_BLUE); // false Symbol.for(str) 从注册表返回一个Symbol值。 Symbol.keyFor(symbolValue) 从注册表返回token字符串。 var a = Symbol("aaa"); var b = Symbol.for("aaa"); var c = Symbol.for("aaa"); console.log(a == b); // false console.log(a == c); // false console.log(b == c); // true console.log(b === c); // true console.log(Symbol.keyFor(a)); // undefined console.log(Symbol.keyFor(b)); // b console.log(Symbol.keyFor(c)); // c
相关 【ES6+】005-ES6新特性:Symbol、迭代器、生成器 目录 一、Symbol 1、Symbol概述 Symbol 特点: 2、基本使用 3、Symbol创建对象属性 4、Symbol内置值 概述: 方法: 演 墨蓝/ 2023年10月05日 16:05/ 0 赞/ 21 阅读
相关 ES6新特性 文章目录 一、ECMASript 介绍 二、ES6 新特性 2.1 let、const 关键字 2.2 变量的解构赋值 ゝ一世哀愁。/ 2022年09月06日 15:27/ 0 赞/ 304 阅读
相关 ES6新特性 Symbol intro ES6中数据类型除了`Number, String, Boolean, Object, null, undefined`, 还新增了`Symbol`。 ` 迈不过友情╰/ 2022年04月23日 20:02/ 0 赞/ 176 阅读
相关 es6新特性 1.let && const •都是块级作用域 •不能重复定义 •避免了变量提升 ① let命令也用于声明对象,但是作用域为局部。 ![在这里插入图片描述][ 红太狼/ 2022年03月07日 21:24/ 0 赞/ 397 阅读
相关 es6新特性 es6语法 > es6语法用起来是十分方便的,但是有些浏览器还是不支持,但是做大型项目中基本上要用到转码器(babel转码器),可以把es6语法转为es5直接使用。 T 落日映苍穹つ/ 2022年01月25日 15:30/ 0 赞/ 395 阅读
相关 ES6新特性 转:[https://www.jianshu.com/p/87008f4f8513][https_www.jianshu.com_p_87008f4f8513] co Bertha 。/ 2022年01月12日 02:19/ 0 赞/ 374 阅读
相关 ES6新特性 转自:[https://www.jianshu.com/p/87008f4f8513][https_www.jianshu.com_p_87008f4f8513] 1.con 冷不防/ 2021年12月18日 07:07/ 0 赞/ 370 阅读
相关 es6新特性 https://www.cnblogs.com/minghui007/p/8177925.html 转载于:https://www.cnblogs.com/LWWTT/p/1 野性酷女/ 2021年11月02日 14:58/ 0 赞/ 536 阅读
相关 ES6新特性 1.变量声明let和const 在ES6以前,var关键字声明变量。无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部)。这就是函数变量提升例如: 我会带着你远行/ 2021年10月29日 07:08/ 0 赞/ 547 阅读
相关 ES6新特性 1.声明变量的关键字:const 和 let JavaScript ES6中引入了另外两个声明变量的关键字:const和let。在ES6中,我们将很少能看到var了。 co 电玩女神/ 2021年09月17日 01:12/ 0 赞/ 532 阅读
还没有评论,来说两句吧...