新しい構造は次のとおりです: 1. 一意の値を表す関数構造であるシンボル 2. 配列に似た「セット」構造を参照するセット。非反復データ; 3. WeakSet、Set と同様、内部データは重複値を持つことができません; 4. Map、マッピング関係を格納できる「辞書」構造を指します。
このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。
1、シンボル
シンボル
はES6 One
の新しい基本データ型の は関数です。Symbol
関数から返される各Symbol
値は一意であり、symbol
値はオブジェクト属性の識別子として機能し、その唯一の目的を持ちます。
const s1 = Symbol() const s2 = Symbol() console.log(s1 === s2); // false
symbol as key
最初の方法は、それをオブジェクトのリテラルに直接追加することです。
// symbol作为key const obj = { [s1]:'abc', [s2]:'cc', }
2 番目の方法は、配列を追加して追加することです。
// 需要用数组方式来获取,不能通过点语法,否则会获取到字符串key console.log(obj[s1]);
3 番目の方法は、オブジェクトのdefineProperty
メソッドを使用して追加することです。
const s4=Symbol() Object.defineProperty(obj,s4,{ configurable:true, enumerable:true, writable:true, value:'ff' })
シンボルを通じて対応する値を取得します
ドット構文ではなく、配列モードで取得する必要があります。そうでない場合は、文字列キーが取得されます。
console.log(obj[s1]);
symbol
を暗黙的にstring
型に変換することはできません。
注: Symbol 関数のパラメーターはシンボル記述子であり、これは ES10 の新機能です
let Sym = Symbol("Sym") alert(Sym) // TypeError: Cannot convert a Symbol value to a string
1 つを直接alert
することはできませんsymbol
オブジェクトですが、toString
または.description
を通じてsymbol
オブジェクトの記述子を取得できます。
let sym = Symbol('a') console.log(sym.description); // 'a'
シンボルのトラバース
for
トラバーサルおよびobject.keys
を使用する場合、
symbol を取得できません。正常です。object
には、オブジェクト内のすべてのシンボルのキーを取得するために使用されるgetOwnPropertySymbols
メソッドも用意されています。
const sKeys=(Object.getOwnPropertySymbols(obj)); for(const skey of sKeys){ console.log(obj[skey]); }
グローバル シンボル オブジェクトの登録
複数のsymbol
の値を一貫させる必要がある場合は、## を渡すことができます。 #symbol提供される静的メソッド
forメソッドは、値の一貫性を保つために同じ記述子を渡します。
Symbol.for
このメソッドは、指定されたキーを使用してランタイム シンボル レジストリで既存のシンボルを検索し、見つかった場合はそれを返します。それ以外の場合は、このキーを使用してグローバル シンボル レジストリに新しいシンボルが作成されます。const sa=Symbol.for('cc') const sb=Symbol.for('cc') console.log(sa===sb); //true
Symbol.keyFor
このメソッドは、グローバルsymbolの記述子を取得するために使用されます。
const key =Symbol.keyFor(sb) console.log(key); // c
2. Set
Setオブジェクト (配列に似ています) を使用すると、任意のデータ型を保存できます。ただし、値を繰り返すことはできません。
const s1 = new Set() s1.add(10) s1.add(20) s1.add(30) s1.add(40) console.log(s1) // Set(4) { 10, 20, 30, 40 } s1.add(20) console.log(s1) // Set(4) { 10, 20, 30, 40 }
共通メソッドの設定
戻り値 | 説明 | |
---|---|---|
set | オブジェクト内の数値
オブジェクト内の数値を返します。セットオブジェクト Quantity |
|
Set | Object
Add element |
|
boolean |
要素を削除 |
|
boolean |
Set | この値がオブジェクトに存在するかどうか
|
None |
Set | オブジェクトの値をクリアします
|
WeakSetは
Setと同様のデータ構造であり、内部データは重複した値を持つことができません。これと
Set
WeakSet
の違いはオブジェクト型のみを保存でき、基本データ型は保存できません
WeakSet
これは要素への弱参照です
const weakSet = new WeakSet(); let obj = { name: "_island" }; weakSet.add(obj);
WeakSet 共通メソッド
メソッド
説明 | |||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
weakset オブジェクト |
要素の追加
|
削除 | |||||||||||||||||||||||||||||||||
boolean |
要素を削除
|
has | |||||||||||||||||||||||||||||||||
boolean |
weakset この値がオブジェクトに存在するかどうか |
关于遍历
所以 4、Map
const obj1 = { name: "_island" }; const obj2 = { name: "QC2125" }; const obj3={ [obj1]:'a', [obj2]:'b', } console.log(obj3); // { '[object Object]': 'b' }
ログイン後にコピー
而 const obj1 = { name: "_island" }; const obj2 = { name: "QC2125" }; const map = new Map(); map.set(obj1, "a"); map.set(obj2, "b"); console.log(map); // Map(2) { { name: '_island' } => 'a', { name: 'QC2125' } => 'b' } // or const map2 = new Map([[obj1,'a'],[obj2,'b']])
ログイン後にコピー
Map常用方法
遍历Map 通过 map2.forEach((item) => console.log(item));
ログイン後にコピー
通过 for ([val, key] of map2) { console.log(`${key}---${val}`); }
ログイン後にコピー
5、WeakMap 和
基本使用 const weakMap = new WeakMap(); weakMap.set(obj, "a"); console.log(weakMap.get(obj)); // a
ログイン後にコピー
WeakMap常用方法
关于遍历 和 【相关推荐:javascript视频教程、web前端】 以上が新しい es6 データ構造とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
ES6 マップで配列オブジェクトをキーとして使用する
Node4.0 を使用しており、今のところその機能がとても気に入っているので、コードを ES6 に更新しようとしています。ただし、新しい ES6Map データ構造では、配列をキーと...
から 2023-10-21 18:06:40
0
2
277
HTML ファイルで JS モジュールを使用する
Javascript コードを node.js に変換しているので、「関数」コンポーネントだけではなく「クラス」と「モジュール」を使用して、古いコードを ES6 に適合するように変...
から 2023-09-07 14:46:07
0
1
297
関連トピック
詳細>
|