ES6 Symbol在对象中的作用实例分析

作者:木棉

时间:2026-10-23

浏览:140

本文详细解析ES6中Symbol数据类型的声明方法及其在对象中的应用。通过实例展示如何利用Symbol作为属性名来避免命名冲突,并演示如何通过Symbol隐藏对象属性,防止在常规循环中被遍历输出,从而实现对特定数据的保护。

文章目录

本文通过具体实例解析ES6中Symbol在对象里的应用方式,供读者参考学习。

在ES5标准下,对象属性名均为字符串类型,这极易引发属性名冲突。例如在使用他人提供的对象并试图通过mixin模式添加新方法时,新方法名可能与现有方法重名。为此,ES6引入了Symbol类型。Symbol是一种表示唯一值的原始数据类型,它是继undefined、null、Boolean、String、Number和Object之后的第七种数据类型。只要属性名属于Symbol类型,便具有唯一性,从而确保不会与其他属性名发生冲突。

1.声明Symbol

Symbol函数可接收一个字符串参数,用于描述当前Symbol实例,主要作用是在控制台显示或转换为字符串时便于区分。


var f= Symbol();//Symbol()
var f= Symbol('foo');//Symbol(foo)


// 没有参数的情况
let s1 = Symbol();
let s2 = Symbol();
s1 === s2 // false

// 有参数的情况
let s1 = Symbol('foo');
let s2 = Symbol('foo');

s1 === s2 // false

需注意,Symbol函数的参数仅用于描述当前Symbol值,因此即使参数相同,Symbol函数的返回值也不相等。

s1和s2均为Symbol函数的返回值,且参数相同,但二者并不相等。

2.Symbol在对象中的应用

将Symbol用作属性名:


let mySymbol = Symbol();

// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';

// 第二种写法
let a = {
 [mySymbol]: 'Hello!'
};

// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });

// 以上写法都得到同样结果
a[mySymbol] // "Hello!"

赋值时采用括号形式:


a[mySymbol]='web';

3.Symbol对对象元素的保护作用

当对象包含大量值,但循环输出时不希望全部展示时,可使用Symbol进行保护。

未进行保护的写法示例:


var obj={name:'小明',skill:'web',age:18};
for (let item in obj){
  console.log(obj[item]);
}

若不希望他人知晓年龄信息,可通过Symbol实现循环保护。


let obj={name:'小明',skill:'web'};
let age=Symbol();
obj[age]=18;
for (let item in obj){
  console.log(obj[item]);//小明、web
} 
console.log(obj[age]);

感兴趣的朋友可使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章