ES6 Symbol详解与示例
121 浏览量
更新于2024-08-31
收藏 78KB PDF 举报
"ES6 Symbol 是一种新的原始数据类型,用于创建独一无二的值,从而避免对象属性名的冲突。在JavaScript中,Symbol是继undefined、null、布尔值、字符串、数值和对象后的第七种数据类型。它通过Symbol函数生成,不可变且不可哈希,确保了每个Symbol值的独特性。
Symbol函数不接受new操作符,生成的值不是对象,不能添加属性。它可以接受一个字符串作为参数,作为Symbol实例的描述,方便在输出或转换为字符串时进行区分。例如:
```javascript
let s1 = Symbol('foo');
let s2 = Symbol('bar');
s1 // Symbol(foo)
s2 // Symbol(bar)
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"
```
在对象中使用Symbol作为属性名可以避免与常规字符串属性名的冲突,例如:
```javascript
let obj = {
[Symbol('key')]: 'value'
};
obj[Symbol('key')] // "value"
```
此外,全局的SymbolRegistry允许存储和查找与Symbol关联的元数据,这对于实现某些高级特性,如迭代器或定制操作符行为等很有帮助。例如,定义一个迭代器的Symbol.iterator属性:
```javascript
let iterable = {
[Symbol.iterator]: function*() {
yield 1;
yield 2;
yield 3;
}
};
for (let item of iterable) {
console.log(item); // 1, 2, 3
}
```
Symbol还用于定义非枚举属性,即在`for...in`循环和`Object.keys()`中不会被列举的属性:
```javascript
let obj = {
[Symbol.iterator]: function*() {},
[Symbol.unscopables]: {
foo: true
}
};
'foo' in obj // false
'length' in obj // false
Reflect.ownKeys(obj).map(key => key.toString()) // [Symbol.iterator, Symbol.unscopables]
```
ES6的Symbol提供了一种创建独特标识符的方法,有助于构建更加安全和可维护的代码,尤其在处理对象属性和定义特殊方法时。了解并熟练运用Symbol可以帮助开发者更好地利用JavaScript的新特性和最佳实践。"
157 浏览量
232 浏览量
2020-10-16 上传
105 浏览量
228 浏览量
点击了解资源详情
140 浏览量
点击了解资源详情
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38664989
- 粉丝: 4
最新资源
- Java平台下的MySQL数据库连接器使用指南
- Android开发:IconEditText实现图标与输入框结合
- Node.js结合TI Sensortag通过socket.io发布数据到HTML
- Flutter入门指南:MDC-100系列代码实验室
- MyBatisPlus生成器使用教程与文件解压指南
- 深入浅出BaseAdapter的传统实现方法
- C语言学习资料包:编程代码与实践指南
- Android图片处理SDK核心功能及工具类介绍
- Pebble平台上的同步番茄钟应用开发
- Elan Smart Pad驱动卸载指南及触摸板问题解决
- Activiti流程演示Demo:独立Web应用的实践指南
- 快速飞行动效设计:彩带跟随与购物车动画
- 高校收费管理系统:全面管理学生收费情况
- Toucan库:定义和检索Clojure应用程序模型
- ActiveAndroid ORM框架在Android中的实践演示
- rjs-jade:将Jade整合至RequireJS环境的插件