Skip to content

Commit

Permalink
docs: fix docs
Browse files Browse the repository at this point in the history
  • Loading branch information
tsejx committed Dec 15, 2023
1 parent 55d0fca commit 71e6e1b
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
nav:
title: 内置对象
order: 2
group:
title: Symbol
order: 6
title: Symbol.prototype.description
order: 13
---

# Symbol.prototype.description

`Symbol.prototype.description` 为一个只读属性,它会返回 Symbol 对象的可选描述的字符串。

## 属性说明

Symbol 对象可以通过一个可选的描述创建,可用于调试,但不能用于访问 Symbol 本身。`Symbol.prototype.description` 属性可以用于读取该描述。与 `Symbol.prototype.toString()` 不同的是它不会包含 `Symbol()` 的字符串。具体请看实例。

## 代码示例

```js
console.log(Symbol('desc').description);
// expected output: "desc"

console.log(Symbol.iterator.description);
// expected output: "Symbol.iterator"

console.log(Symbol.for('foo').description);
// expected output: "foo"

console.log(`${Symbol('foo').description}bar`);
// expected output: "foobar"
```

## 参考资料

- [MDN: Symbol.prototype.description](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description)
40 changes: 27 additions & 13 deletions docs/standard-built-in-objects/fundamental-objects/symbol/symbol.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,23 @@ order: 1

# Symbol

Symbol 数据类型是一种原始数据类型,该类型的性质在于这个类型的值可以用来创建匿名的对象属性。
Symbol 数据类型是一种原始数据类型,该类型的性质在于这个类型的值可以用来创建 <strong style="color: red">匿名</strong> 的对象属性。

## 类型声明

```ts
interface SymbolConstructor {
readonly prototype: Symbol;

(descriptioon?: string | number): symbol;

for(key: string): symbol;

keyFor(sym: symbol): string | undefined;
}

declare var Symbol: SymbolConstructor;
```

## 类型特性

Expand All @@ -22,8 +38,8 @@ Symbol 值只能通过 Symbol 函数生成。 Symbol 类型的值作为对象属
```js
const symbol = Symbol();

typeof symbol;
// 'symbol'
console.log(typeof symbol);
// Output: 'symbol'
```

### 无法实例化
Expand Down Expand Up @@ -317,12 +333,12 @@ Symbol.keyFor(s2);
手动实现 Symbol:

```js
(function() {
(function () {
var root = this;

var generateName = (function() {
var generateName = (function () {
var postfix = 0;
return function(descString) {
return function (descString) {
postfix++;
return '@@' + descString + '_' + postfix;
};
Expand All @@ -334,10 +350,10 @@ Symbol.keyFor(s2);
var descString = description === undefined ? undefined : String(description);

var symbol = Object.create({
toString: function() {
toString: function () {
return this.__Name__;
},
valueOf: function() {
valueOf: function () {
return this;
},
});
Expand All @@ -364,7 +380,7 @@ Symbol.keyFor(s2);

Object.defineProperties(SymbolPolyfill, {
for: {
value: function(description) {
value: function (description) {
var descString = description === undefined ? undefined : String(description);
return forMap[descString]
? forMap[descString]
Expand All @@ -375,7 +391,7 @@ Symbol.keyFor(s2);
configurable: true,
},
keyFor: {
value: function(symbol) {
value: function (symbol) {
for (var key in forMap) {
if (forMap[key] === symbol) return key;
}
Expand Down Expand Up @@ -410,9 +426,7 @@ Symbol.keyFor(s2);

1. 利用 Symbol 值的唯一特性,作为类库某些对象的属性名,这样可以避免使用者命名冲突导致的覆盖问题

---

**参考资料:**
## 参考资料

- [📝 ECMAScript 6 入门:Symbol](http://es6.ruanyifeng.com/?search=ad&x=0&y=0#docs/symbol)
- [📝 ES6 系列之模拟实现 Symbol](https://juejin.im/post/6844903619544760328)
Expand Down

0 comments on commit 71e6e1b

Please sign in to comment.