您的位置:首页 > 财经 > 产业 > 急招土建施工员技术员_家装设计包括哪些内容_百度指数在线查询小程序_滕州百度推广

急招土建施工员技术员_家装设计包括哪些内容_百度指数在线查询小程序_滕州百度推广

2025/4/3 11:17:32 来源:https://blog.csdn.net/weixin_40629244/article/details/146965919  浏览:    关键词:急招土建施工员技术员_家装设计包括哪些内容_百度指数在线查询小程序_滕州百度推广
急招土建施工员技术员_家装设计包括哪些内容_百度指数在线查询小程序_滕州百度推广

1. 什么是Symbol?

Symbol是ES6引入的一种新的原始数据类型,表示独一无二的值,它是JavaScript中的第七种数据类型。

2. 创建Symbol

// 创建一个Symbol
const sym1 = Symbol();
const sym2 = Symbol('description'); // 可以添加描述console.log(typeof sym1);     // "symbol"
console.log(sym2.toString()); // "Symbol(description)"

3. Symbol的特性

1. 唯一性,每个Symbol都是唯一的,即使描述相同;

const sym1 = Symbol('test');
const sym2 = Symbol('test');console.log(sym1 === sym2); // false

2. 不可枚举性,Symbol属性不会出现在for循环中,也不会被Object.keys()、Object.getOwnPropertyNames()返回;

const obj = {[Symbol('key')]: 'value',normalKey: 'normalValue'
};console.log(Object.keys(obj)); // ["normalKey"]

3. 不可强制转换,Symbol不能与其他类型的值进行运算;

const sym = Symbol('test');
console.log(sym + 'string'); 
// TypeError: Cannot convert a Symbol value to a string

4. Symbol的使用场景

1. 作为对象属性,防止属性名冲突,适合定义对象私有属性;

const NAME = Symbol('name');
const AGE = Symbol('age');const person = {[NAME]: '张三',[AGE]: 25,job: '工程师'
};console.log(person[NAME]); // "张三"

2. 定义常量,确保常量值唯一;

const LOG_LEVEL = {DEBUG: Symbol("debug"),INFO: Symbol("info"),WARN: Symbol("warn"),ERROR: Symbol("error"),
};function log(message, level) {switch (level) {case LOG_LEVEL.DEBUG:console.debug(message);break;case LOG_LEVEL.ERROR:console.error(message);break;// ...}
}

3. 实现类的私有成员,用于模拟私有属性/方法;

const _items = Symbol("stackItems");class Stack {constructor() {this[_items] = [];}push(item) {this[_items].push(item);}pop() {return this[_items].pop();}
}const stack = new Stack();
stack.push(1);
console.log(stack._items); // undefined

4. 定义Well-known Symbols

JavaScript内置了一些Symbol值,称为Well-known Symbols,用于改变语言内部行为。

// 自定义对象的迭代行为
const myIterable = {[Symbol.iterator]: function* () {yield 1;yield 2;yield 3;},
};console.log([...myIterable]); // [1, 2, 3]// 自定义对象的toString标签
class MyClass {get [Symbol.toStringTag]() {return "MyClass";}
}console.log(new MyClass().toString()); // "[object MyClass]"

5. 全局Symbol注册表

可以通过Symbol.for()和Symbol.keyFor()在全局Symbol注册表中创建和查找Symbol。

// 从全局注册表中获取Symbol,不存在则创建
const globalSym1 = Symbol.for('global');
const globalSym2 = Symbol.for('global');console.log(globalSym1 === globalSym2); // true// 获取Symbol的key
console.log(Symbol.keyFor(globalSym1)); // "global"

6. 注意事项

1. Symbol不能使用new操作符,它不是构造函数;

2. Symbol值不能与其他类型的值进行运算;

3. Symbol值可以显式转换为字符串或布尔值;

4. 使用Object.getOwnPropertySymbols()可以获取对象的所有Symbol属性;

7. 总结

Symbol的主要用途是创建唯一标识符,避免命名冲突,特别适合用于:

1. 对象属性的唯一键名;

2. 定义私有属性;

3. 定义常量;

4. 修改内置对象的行为;

在现代JavaScript开发中,Symbol已经成为实现元编程和解决命名冲突的重要工具。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com