ES6 Symbol在对象中的作用实例分析
本文详细解析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程序设计有所帮助。
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
为什么JS中typeof []返回object:数组类型检测误区解析
2026-11-04 19:50:47
