JavaScriptの弱点は何か


弱点はJavaScriptのJavaScriptコレクションの新しいオブジェクトの一つです.このコレクションは少し難解なことができます.JavaScript開発者の多くは、それについてあまり知りません.このチュートリアルでは、JavaScriptの弱さを設定する方法を学びます.

簡単な紹介
弱点はSets . あなたがセットに慣れていない場合は、心配しないでください.あなたはセットの事前知識を持っている必要はありません.弱点と集合に戻る.どちらもコレクションです.これらのコレクションを使用して値を格納できます.これを理解するのに役立つ一つのことはarrays .
弱集合と集合のような配列もコレクションです.また、数字や文字列からbooleansやオブジェクト、様々な値を格納することもできます.これは類似点が終了し、違いが現れ始めるところです.つの違いは、配列とは異なり、セットは一意の値のみを含むことができます.
弱さで、この違いはさらに行きます.弱集合はオブジェクトを含むことができます.オブジェクト以外の何かを追加しようとするとエラーが発生します.これらのオブジェクトも一意でなければなりません.オブジェクトを2回追加しようとすると、2番目は追加されません.
弱点に関するもう一つの重要なことは、名前の「弱い」部分です.“弱い”部分は、弱点の中に格納されているすべてのオブジェクトが弱く保持されていることを意味します.それで、オブジェクトがそうである弱集合に格納されるオブジェクトに他の全ての参照を取り除いてください.garbage collected .
そのオブジェクトはメモリから解放されます.しかし、これはオブジェクトがすぐにリリースされることを意味しません.ガベージコレクションに対してのみマークされます.それが起こるときだけ、それはリリースされます.セットと弱集合の間にもう一つ重要な違いがあります.弱集合は反復できません.
あなたがアイテムを追加したり、既存の削除します.また、弱集合が特定の項目を含んでいるかどうかチェックすることもできます.しかし、いくつかのループでそれを繰り返すことはできません.ないsize プロパティは、特定の弱点にどのように多くの項目を教えてくれます.さて、新しい弱点を作成する方法を見てみましょう.

新しい弱点の作成
あなたが使用しなければならない新しい弱点を作成したいWeakSet() コンストラクタ.これは、値を格納するために使用できる新しい弱点を作成します.あなたが使用できる2つの方法がありますWeakSet() コンストラクタ.まず、空の弱集合を作成し、後で値を追加するために使用できます.
それから、あなたがすることができるもう一つのことがあります.新しい値を作成するには、コンストラクターにパラメーターとして値を反復指定できます.“iterable”という単語を聞くと価値のあるコレクションを想像します.この場合、iterableは配列です.したがって、オブジェクトを持つ配列を渡します.
// Creating new WeakSets no.1: Empty
const myWeakSet = new WeakSet()

// Creating new WeakSets no.2: Passing some objects
const myWeakSet = new WeakSet([myObj1, myObj1])

弱集合法
私たちはすでに弱点が何をするかについて少し話しました.あなたは弱点にアイテムを追加することができますし、それらを削除することができます.また、いくつかの弱集合が特定の項目を含んでいるかどうかを確認できます.これらのタスクごとに特定の方法があります.それらを見てみましょう.

弱集合への新しいオブジェクトの追加
ときに2つのことを行うことができます弱点にオブジェクトを追加します.まず、これらのオブジェクトをWeakSet() コンストラクタ.第二に、後での助けを借りてオブジェクトを追加することができますadd() メソッド.このメソッドは、格納するオブジェクトを1つ受け取ります.
これはあなたが覚えておくべきことです.それは実際には、1つのオブジェクトだけではなく、受け入れる.あなたが複数のオブジェクトで通過しようとするならば、最初だけは弱点に加えられます.残りは無視されます.したがって、複数のオブジェクトを追加する場合は、複数のadd() それぞれのメソッド.
// Adding items no.1: via constructor
// Create some objects
let myObj1 = { name: 'Toby' }

let myObj2 = { name: 'Christine' }

// Create new WeakSet
const myWeakSet = new WeakSet([myObj1, myObj2])


// Adding items no.1: with add() method
// Create some objects
let myObj1 = { name: 'Rafael' }

let myObj2 = { name: 'Victoria' }

// Create new WeakSet
const myWeakSet = new WeakSet()

// Add objects
myWeakSet.add(myObj1)
myWeakSet.add(myObj2)


// This will not work:
// Create some objects
let myObj1 = { name: 'Jack' }

let myObj2 = { name: 'Julie' }

// Create new WeakSet
const myWeakSet = new WeakSet()

// Add objects
// The "myObj2" will not be added to the set
myWeakSet.add(myObj1, myObj2)

弱集合からオブジェクトを削除する
弱点からオブジェクトを削除する簡単かつ簡単です.何らかのオブジェクトを削除する場合は、使用するメソッドがあります.このメソッドはdelete() . このメソッドは、削除するオブジェクトの名前を1つ受け取ります.同様にadd() , また、一度に1つのオブジェクトで動作します.
したがって、複数のオブジェクトを削除する場合は、複数のdelete() メソッド、各オブジェクトの1つ.このメソッドを使用すると、常にboolean . 返すtrue を返します.オブジェクトが弱集合に格納されていない場合、false .
// Create some objects
let myObj1 = {
  language: 'JavaScript'
}

let myObj2 = {
  language: 'TypeScript'
}

let myObj3 = {
  language: 'Python'
}

// Create new WeakSet
// and add first two objects
const myWeakSet = new WeakSet([myObj1, myObj2])

// Remove "myObj1" object
myWeakSet.delete(myObj1)
// true

// Remove "myObj2" object
myWeakSet.delete(myObj2)
// true

// Try to remove "myObj3" object
myWeakSet.delete(myObj3)
// false
// Object "myObj3" is not stored in myWeakSet


// This will not work:
let myObj1 = {
  language: 'JavaScript'
}

let myObj2 = {
  language: 'TypeScript'
}

// Create new WeakSet
const myWeakSet = new WeakSet([myObj1, myObj2])

// Try to remove two objects at the same time
myWeakSet.delete(myObj1, myObj2)
// true
// It will successfully remove "myObj1",
// but ignore "myObj2"

オブジェクトが弱集合に存在するかどうかを調べる
弱集合はiterableではなく、size プロパティ.これは、特定のオブジェクトが弱集合で存在しないか、存在しないかを知るのを難しくすることができます.幸いにも、あなたがこれを見つけるために使用できる方法があります.このメソッドはhas() . 同様にdelete() and add() また、1つのパラメータを受け入れます.
このパラメーターは、チェックするオブジェクトの名前です.このメソッドを使用する場合は、Booleanを返しますdelete() . It returns either true オブジェクトが弱集合またはfalse それが存在しないならば.
// Create some objects
let myObj1 = {
  language: 'React'
}

let myObj2 = {
  language: 'Vue.js'
}

let myObj3 = {
  language: 'Angular'
}

// Create new WeakSet
// and add first two objects
const myWeakSet = new WeakSet([myObj1, myObj2])

// Check if "myObj1" exists in "myWeakSet"
myWeakSet.has(myObj1)
// Output:
// true

// Check if "myObj2" exists in "myWeakSet"
myWeakSet.has(myObj2)
// Output:
// true

// Check if "myObj3" exists in "myWeakSet"
myWeakSet.has(myObj3)
// Output:
// false

イテレーションとサイズプロパティ
ご存知のように、弱集合と集合の1つの違いは、弱点が反復できないことです.もう一つの違いはsize プロパティ.これは意味をなさないかもしれません.あなたがそれについて考えるならば、それは実際に意味をなします.我々が議論したように、弱点の中のすべてのオブジェクトは弱く保持されます.
これらのオブジェクトのいずれかがすべての参照を失うならば、それはガベージコレクションのために「マークされます」.このガベージコレクションが発生すると、このオブジェクトはメモリから解放されます.行ってしまった.ガベージコレクションについてのことは、望むときはいつでも動くことです.いつそれが起こるか予測できない.
あなたがオブジェクトを持っているとしましょう.このオブジェクトを弱点に追加します.コードの別の部分で、そのオブジェクトを削除する場合はどうですか?答えはそれによる.ガベージコレクションが実行する時間があったかどうかによって異なります.それがそうしたならば、オブジェクトはメモリから解放されます、そして、それは弱点からもなくなります.
あなたが使える瞬間を想像しましょうsize を返します.ガベージコレクションの前にそれを繰り返すと、1つの結果が得られます.ガベージコレクションを繰り返し実行すると、別のコレクションを取得します.同じsize . つの異なる番号を取得します.
これが意味の弱さを反復できない理由であり、ないsize . この2人は信頼できないだろう.彼らは、あなたに1つのことを話します、そして、何か完全にちょうど2番目の後に異なります.それはダイスを転がすようなものだ.

hs ()の使い方
私はあなたがなぜiterable弱さとsize プロパティは意味をなさない.についてhas() 方法?The has() 異なる話です.このメソッドがどのように動作するか、またはどのように使用するかについて考えてください.使用するときは、チェックするオブジェクトの名前を渡します.
この名前、変数名はリファレンスです.あなたがそれを渡すとき、あなたはそれ自体を通過しません.代わりに、その参照を渡します.参照は変数のメモリアドレスです.変数が格納されるメモリ位置へのポインタです.
ガベージコレクションへ戻る.ガベージコレクションは、オブジェクトへのすべての参照がなくなったときにのみオブジェクトを収集します.さもなければ、それは単独でそれらを残します.使用するときhas() メソッドと、いくつかのオブジェクトへの参照を渡すと、そのオブジェクトにまだ1つの参照があることを意味します.
これは、このオブジェクトがガベージコレクションではないことを意味します.現存.だから、もしあなたがhas() あなたが信頼できる情報を得る方法.これが理由ですhas() メソッドは反復処理とsize プロパティはありません.has() 参照、既存のオブジェクトが必要です.反復とsize プロパティはありません.

弱集合の使用事例
彼らはどのように動作するため、弱点は非常に頻繁に使用されていません.いくつかの値、オブジェクトまたはNOT、配列またはAを保存する場合Map より良い選択されます.弱点が役に立つ一つのシナリオは既存のオブジェクトを追跡することです.配列またはマップ内のそれらのオブジェクトへの参照を格納できます.
これは、ガベージコレクションが他のすべての参照がなくなった場合、それらのオブジェクトのいずれかを収集するのを防ぎます.これらのオブジェクトはメモリのままで、潜在的にメモリリークを引き起こす可能性があります.これらのオブジェクトを格納する弱点を使用して、もはやこの問題があります.
簡単な例はログインシステムです.あなたは弱点にそれらを追加することによってオンラインになっているユーザー(オブジェクト)を追跡することができます.それらのユーザーのいずれかが適切なオブジェクトを削除したままになったとき.後で、あなたはhas() 特定のユーザーがまだオンラインであるかどうかチェックする方法、適切なオブジェクトは存在します.
// Create three users that are logged into a system
let user1 = { username: 'joey' }
let user2 = { username: 'jack15' }
let user3 = { username: 'skylar' }

// Create new WeakSet
const loggedUsers = new WeakSet()

// Add "user1" to "loggedUsers"
loggedUsers.add(user1)

// Add "user2" to "loggedUsers"
loggedUsers.add(user2)

// Add "user3" to "loggedUsers"
loggedUsers.add(user3)

// Check if all users are present
// loggedUsers.has(user1)
// // Output:
// // true

// loggedUsers.has(user2)
// // Output:
// // true

// loggedUsers.has(user3)
// // Output:
// // true

// Let "user2" and "user3" log out
user2 = null
user3 = null

// Check if all users are still logged in
loggedUsers.has(user1)
// Output:
// true

loggedUsers.has(user2)
// Output:
// false

loggedUsers.has(user3)
// Output:
// false

結論:JavaScriptの弱点とその仕組み
弱点は、頻繁に使用しない場合があります機能の一つです.しかし、それは完全に役に立たないことを意味しません.そうではない.他の機能よりも良いことがいくつかあります.このチュートリアルでは、弱点がどのようなものであるか、どのように動作しているか、そして、彼らが便利であるかもしれないことを理解するのを助けてください.