告别代码冲突!JavaScript Symbol让你写出更健壮、更灵活的代码!

一、什么是Symbol?

在JavaScript中,Symbol是ES6引入的一种原始数据类型,用于生成全局唯一的标识符。它的核心特性是不可变性和唯一性,即使两个Symbol拥有相同的描述(description),它们的值也永远不会相等Symbol('foo') !== Symbol('foo')

Symbol本质上是一个函数,调用它会返回一个Symbol类型的值。你可以选择性地给Symbol添加一个描述,方便调试和识别。

const sym1 = Symbol();
const sym2 = Symbol("这是一个描述");

console.log(sym1); // Symbol()
console.log(sym2); // Symbol(这是一个描述)

console.log(sym1 === sym2); // false

二、Symbol的三大核心特性

  1. 唯一性
    每个Symbol都是独一无二的,适合作为对象的“隐藏”属性键。

    const key1 = Symbol('id');  
    const key2 = Symbol('id');  
    console.log(key1 === key2); // false  
    
  2. 不可枚举性
    Symbol属性默认不会出现在for...inObject.keys()JSON.stringify()中。

    const obj = { [Symbol('secret')]: 'value' };  
    console.log(Object.keys(obj)); // []  
    // 需通过Object.getOwnPropertySymbols()访问  
    console.log(Object.getOwnPropertySymbols(obj).length); // 1 
    
  3. 全局共享Symbol
    使用Symbol.for(key)可在全局注册表中创建或获取Symbol。相同key的Symbol会复用,适合跨模块共享。

    const s1 = Symbol.for('global');  
    const s2 = Symbol.for('global');  
    console.log(s1 === s2); // true  
    console.log(Symbol.keyFor(s1)); // 'global'  
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.概述 在ES5之前 数据类型只有六种 是: undefined ,Object, null,Number,St...
    黑云阅读 157评论 0 2
  • 实习的时候写的学习笔记 如有错误请各位大佬直接留言批判,防止错误的信息会误导他人! ---------------...
    ci鱼丸粗面阅读 565评论 0 0
  • Es6 1.数组 1.扩展运算符 是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参...
    林深不見鹿阅读 235评论 0 0
  • 1.新的标准规范 ECMAScript2015 是 js 的一种的新的标准规范,就是对 js 的写法上提出了新的语...
    望月从良glh阅读 276评论 0 0
  • ES6 新特性 ES6 新特性 一ES6简介 二块级作用域绑定1 let声明2 const声明Constant D...
    _无为_阅读 892评论 0 3