JS:symbol有什么作用(*****五颗星)
symbol:
symbol是一个ES6标准种新增的一种基本数据类型,在JavaScript中,共有七种基本数据类型:string、number、bigint、boolean、null、undefined、symbol。并且除了null和undefined之外,每个基本类型都有其包装对象。
Symbol() 函数会返回 symbol 类型的值。
如果你真的想创建一个 Symbol 包装器对象 (Symbol wrapper object),你可以使用 Object() 函数:
全局共享的 Symbol
上面使用 Symbol() 函数的语法,不会在你的整个代码库中创建一个可用的全局的 symbol 类型。要创建跨文件可用的 symbol,甚至跨域(每个都有它自己的全局作用域),使用 Symbol.for() 方法和 Symbol.keyFor() 方法从全局的 symbol 注册表设置和取得 symbol。
在对象中查找 Symbol 属性
Object.getOwnPropertySymbols() 方法让你在查找一个给定对象的符号属性时返回一个 symbol 类型的数组。注意,每个初始化的对象都是没有自己的 symbol 属性的,因此这个数组可能为空,除非你已经在对象上设置了 symbol 属性。
如果你用Symbol.for()创建带有相同 description的两个 symbol,那它们就是相等的。
<script> const symbol1 = Symbol.for('helloworld'); const symbol2 = Symbol.for('helloworld'); console.log(symbol1 === symbol2); // true console.log(symbol1); // 'Symbol(helloworld)' </script>
作用:
- 表示独一无二的变量,防止命名冲突
- symbol可以去模拟私有变量,由于任何两个symbol都是不相等的,在 JavaScript 里可以用来模拟私有属性。
- 一个 symbol 值能作为对象属性的标识符(属性名);这是该数据类型仅有的目的,只有 字符串 和 symbol 类型才能用作对象属性名。
symbol不会出现在 Object.keys()的结果中,因此除非你明确地export 一个symbol,或者用 Object.getOwnPropertySymbols()函数获取,否则其他代码无法访问这个属性。
注意:
- typeof运算符能识别 symbol 类型
- Symbols 在 for...in 迭代中不可枚举。
Object.getOwnPropertyNames() 不会返回 symbol 对象的属性,但能使用 Object.getOwnPropertySymbols() 得到。
Object.getOwnPropertySymbols() 方法让你在查找一个给定对象的符号属性时返回一个 symbol 类型的数组。。
- 当使用 JSON.stringify() 时,以 symbol 值作为键的属性会被完全忽略:
- 当一个 Symbol 包装器对象作为一个属性的键时,这个对象将被强制转换为它包装过的 symbol 值:
- Symbol作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"
- 每个从 Symbol() 返回的 symbol 值都是唯一的。所以没有
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理