ES6符号与符号属性

本文详细介绍了JavaScript ES6中的符号类型,包括如何创建和使用符号值,如何实现共享,以及如何转换和检索符号。还探讨了知名的元编程符号,如Symbol.hasInstance、Symbol.isConcatSpreadable等,用于修改内置行为。最后,总结了符号在数据类型转换、对象描述和with语句限制中的应用。
摘要由CSDN通过智能技术生成

前言

      JavaScript在ES6之前有5种基本类型(number Boolen string null undefined),在 ES6新增了一个基本类型—符号(symbol),本篇文章将会讲解符号的相关内容。

 let firstName = Symbol();
 console.log(typeof firstName); // symbol

创建符号值

      使用Symbol函数可以创建一个符号值,符号值没有字面量形式。

let firstName = Symbol();

注意:new Symbol()将会抛出错误。因为符号值是基本类型的值
      创建符号值还可以添加一个字符串形式的描述的参数。此描述并不能用来访问对应属性,但可以用来调试以及增加代码的可读性。

let lastName = Symbol("123");
var person = {
   };
person[lastName] = "lucy";
console.log("123" in person) //false

      符号的描述内容可以通过 变量名.description 提取出来

let lastName = Symbol("123");
console.log(lastName.description); //123

使用符号值

      创建的符号值类型的变量可以作为对象中的需计算属性名进行使用。

  let lastName = Symbol("123");
  let person = {
   
  		[lastName] : "lucy"
  }
  console.log(person[lastName]); //lucy

共享符号值

      在不同的代码段中使用相同的符号值,ES6提供了全局符号注册表。
      什么是全局符号注册表?
它类似于全局作用域,是一个共享环境。
1.Symbol.for()创建共享符号值
      此方法可以添加一个字符串类型的参数,作为目标符号值的唯一标识符,同时作为描述信息。

 let a = Symbol.for("first");
 let obj = {
   };
 obj[a] = "apple";
 console.log(obj[a]); //apple

      此方法看起来和刚刚的Symbol()没有太多差别,其实是有很大差别的。
      下面看一下它的执行的过程:

      首先搜索全局符号注册表,是否存在键值为“first”的符号值,如果存在,直接返回这个已存在的符号值;如果不存在,会创建一个新的符号值,并将“first”键值记录到全局符号注册表中,返回这个新的符号值。

      意味着使用同一个键值调用symbol.for()方法都会返回同一个符号值,包含同一个符号值可以互换使用。

let a = Symbol.for("first");
let obj = {
   };
obj[a] = "apple";
console.log(obj[a]); //apple
console.log(a); //Symbol(first)
let a1 = Symbol.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值