ES 6データタイプSymbol(一意)
20679 ワード
データの種類
目次データタイプ データ分類 Symbolデータタイプ 概要 属性名 属性名のエルゴード は、プライベート属性 を定義する.は、プライベート方法を定義する . Symbol.for()、Symbol.keyFor() その他の方法 BigIntデータタイプ はなぜ導入されたのですか? BigIntオブジェクト データ分類基本タイプ:直接アクセス基本タイプ 複雑なタイプ:引用による複雑なタイプへのアクセス に戻る.
Symbolデータタイプ
概要
なぜこのタイプを導入しますか?
ES 5のオブジェクト属性名はすべて文字列で、属性名の衝突を引き起こしやすいです.
Symbol:唯一無二の値を表し、最大の使い方はオブジェクトの固有属性名を定義するためのもので、しかも値の種類です.
主にコンソールで表示するか、文字列に変換する場合に区別しやすいためです. Symbol値は他のタイプの値とは演算できません. エラーが発生します. Symbol値は、明示的に文字列に変換しても良いし、ブール値に変換しても良いが、数値 には変換できない.は、ES 2019にSymbolの記述 を読み取るためのdescriptionを追加した.
属性名として
Symbolは一意性を持っており、対象の属性名に使用すると、同名の属性が現れないことが保証されます. Symbol値を対象属性名とした場合、ポイント演算子 は使えません. Symbol値が属性名である場合、この属性は公開属性であり、プライベート属性 ではない.
属性名の巡回
Symbolは属性名としてクエリされないいくつかの方法です. for…in、for…ofサイクル中 Object.keys() Object.getOwn PropertyNames() JSON.strigify() Symbolを属性名として取得できる方法: Object.getOwn PropertySymbors()方法
この方法は、現在のオブジェクトのすべてが属性名として使用されているSymbol値である行列を返します.
Reflect.ownKeys()メソッドは、通常のキー名とSymbolキー名 を含むすべてのタイプのキーを返すことができます.
トップディレクトリに戻る
プライベート属性を定義 Symbol.for():同じSymbol値を再使用します.
文字列をパラメータとして受け入れて、そのパラメータを名前とするSymbol値があるかどうかを検索します.ある場合は、このSymbol値を返します.そうでない場合は、この文字列を名称とするSymbol値を新たに作成し、グローバルに登録します.
Symbol.keyFor()方法は、登録されたSymbolタイプ値のkey を返す.
その他の方法の詳細
追加演算子:
トップディレクトリに戻る
BigIntデータタイプ
なぜ導入しますか? JavaScriptのすべての数字は64ビットの浮動小数点数として保存されています.これは数値の表現に2つの制約を与えました.(数値が小さいと精度が失われます.) が2以上の1024乗の数値です.JavaScriptは表現できません.Infinity(無限大) に戻ります.科学と金融の正確な計算に適合するために BigInt:タイプのデータは、拡張子n を追加しなければならない. BigInt:通常の整数とは2つの値であり、それらの間は とは等しくない. BigInt:基本的にNumberは同じです.アップグレード版 です.
Big Intオブジェクト BigInt()構造関数にはパラメータが必要であり、パラメータは正常に数値 に変換できる必要がある.パラメータが小数であれば、 をエラーします.用newキーワードでもエラーが発生します.
計算: BigIntタイプの除算は、小数 を省略します. BigIntは、通常の数値との混合演算ができない . BigInt他はnumberと同じ です.
トップディレクトリに戻る
目次
null
undefined
Symbol
(ES 6)BigInt
(ES 2020)
は、上部ディレクトリSymbolデータタイプ
概要
なぜこのタイプを導入しますか?
ES 5のオブジェクト属性名はすべて文字列で、属性名の衝突を引き起こしやすいです.
Symbol:唯一無二の値を表し、最大の使い方はオブジェクトの固有属性名を定義するためのもので、しかも値の種類です.
let sym1 = Symbol();
let sym2 = Symbol();
console.log(sym1) // Symbol()
console.log(typeof sym1) // 'symbol'
console.log(sym1 == sym2) // false
console.log(sym1 === sym2) // false
Symbol関数は、パラメータとして文字列を受け入れ、Symbolの例についての説明を表します.主にコンソールで表示するか、文字列に変換する場合に区別しやすいためです.
let s1 = Symbol('foo');
let s2 = Symbol('bar');
console.log(s1) // Symbol(foo)
console.log(s2) // Symbol(bar)
console.log(s1.toString()) // "Symbol(foo)"
console.log(s2.toString() )// "Symbol(bar)"
.description
属性名として
Symbolは一意性を持っており、対象の属性名に使用すると、同名の属性が現れないことが保証されます.
const my = Symbol();
const s = Symbol();
// 1
const a = {};
a[my] = 'hello';
// 2
const b = {
[my]: 'hello',
[s](arg) { ... }
};
// 3
const c = {};
Object.defineProperty(a, my, {value: 'hello'});
属性名の巡回
Symbolは属性名としてクエリされないいくつかの方法です.
この方法は、現在のオブジェクトのすべてが属性名として使用されているSymbol値である行列を返します.
トップディレクトリに戻る
プライベート属性を定義
let size = Symbol('size');
class Count{
constructor(){
this[size] = 0;
}
add(item){
this[this[size]] = item;
this[size] ++;
}
static sizeOf(instance){
return instance[size];
}
}
let x = new Count();
console.log(Count.sizeOf(x));// 0
x.add('foo');
console.log(Count.sizeOf(x));// 1
console.log(Object.keys(x)); // ["0"]
console.log(Object.getOwnPropertyNames(x));// ["0"]
console.log(Object.getOwnPropertySymbols(x));// [Symbol(size)]
// x size Symbol , Object.keys(x)、Object.getOwnPropertyNames(x) 。
プライベートメソッドを定義const Hero = (() =>{
const getRandom = Symbol() //
return class{
constructor(attack,hp,defence){
this.attack = attack;
this.hp = hp;
this.defence;
}
gongji(){
const dmg = this.attack * this[getRandom](0.7,1.2);
console.log(dmg)
}
[getRandom](min,max){
return Math.random() * (max - min) + min;
}
}
})();
const h = new Hero(3,100,3);
console.log(h)
Symbol.for()、Symbol.keyFor()文字列をパラメータとして受け入れて、そのパラメータを名前とするSymbol値があるかどうかを検索します.ある場合は、このSymbol値を返します.そうでない場合は、この文字列を名称とするSymbol値を新たに作成し、グローバルに登録します.
let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');
s1 === s2 // true
let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"
let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined
Symbol.for()はSymbol値として登録された名前で、グローバル環境の場合、グローバル環境で実行されているかどうかにかかわらずその他の方法の詳細
追加演算子:
**
(指数演算子)トップディレクトリに戻る
BigIntデータタイプ
なぜ導入しますか?
// 53 ,
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
// 2 1024 ,
Math.pow(2, 1024) // Infinity
typeof BigInt == bigint
Big Intオブジェクト
BigInt(123) //==> 123n
計算:
トップディレクトリに戻る