JavaScriptデータ型(二)
3948 ワード
Objectタイプ
ECMAScriptのオブジェクトは、データと機能のセットです.
オブジェクトの作成
インスタンスのプロパティとメソッド:
Symbolタイプ
ユニークな値を表します.は、基本データ型です.各
作成
Symbol([description])
description:オプションの文字列.Symbolの説明は、デバッグ(コンソール表示、文字列変換など)に使用できますが、symbol自体にアクセスできません.Symbolのパラメータがオブジェクトである場合、オブジェクトのtoStringメソッドが呼び出され、文字列に変換されてからSymbol値が生成されます.
Symbol.for([description])
Symbol.for()とSymbol()の両方の書き方で、新しいSymbolが生成されます.これらの違いは、前者は検索のためにグローバル環境に登録され、後者は検索しません.Symbol.for()は、呼び出すたびに新しいSymbolタイプの値を返すのではなく、指定したkeyがすでに存在するかどうかを確認し、存在しない場合に新しい値を作成します.
Symbol.prototype.description
Symbolの説明を取得します.ES 2019は、インスタンス属性を提供する.
Symbol.keyFor()
登録されたSymbolタイプ値のkeyを返します.
Object.getOwnPropertySymbols()
指定したオブジェクトのすべてのSymbol属性名を取得します.Symbolは属性名として機能するため、この属性は
Reflect.ownKeys()
通常のキー名とSymbolキー名を含むすべてのタイプのキー名を返します.
内蔵Symbol値
...
リファレンス
『JavaScriptプレミアムプログラミング』(第3版)ECMAScript 6入門-チェン一峰
ECMAScriptのオブジェクトは、データと機能のセットです.
オブジェクトの作成
const o = new Object();
const o = new Object; // ,
const o = {};
インスタンスのプロパティとメソッド:
constructor
:コンストラクション関数.hasOwnProperty(propertyName)
:チェックpropertyName
(入力された属性)現在のオブジェクトインスタンス(インスタンスプロトタイプではない)に存在するかどうかを確認します.isPrototypeOf(object)
:入力されたオブジェクトが現在のオブジェクトのプロトタイプであるかどうかをチェックします.propertyIsEnumerable(propertyName)
:チェックpropertyName
(入力された属性)使用可能かfor-in
文列挙.toLocaleString()
:実行環境の地域に対応するオブジェクトを返す文字列表示.toString()
:オブジェクトを返す文字列表示.valueOf()
:オブジェクトの文字列、数値またはブール値を返します.通常はtoString()
と同じ値を返します.const o = new Object();
console.log(o.toLocaleString()); // "[object Object]"
console.log(o.toString()); // "[object Object]"
console.log(o.valueOf()); // "{}"
Symbolタイプ
ユニークな値を表します.は、基本データ型です.各
Symbol()
から返されるsymbol
値は一意です.1つのsymbol
値はオブジェクト属性の識別子とすることができる.これは、このデータ型の唯一の目的です.文法はサポートされていません:new Symbol()
.元のデータ型を中心とした明示的なラッピングオブジェクトの作成は、ECMAScript 6からサポートされません.しかしながら、new Boolean、new String、およびnew Numberのような既存のオリジナルパッケージオブジェクトは、残存する理由により作成することができる.作成
Symbol([description])
description:オプションの文字列.Symbolの説明は、デバッグ(コンソール表示、文字列変換など)に使用できますが、symbol自体にアクセスできません.Symbolのパラメータがオブジェクトである場合、オブジェクトのtoStringメソッドが呼び出され、文字列に変換されてからSymbol値が生成されます.
var sym1 = Symbol();
var sym2 = Symbol('foo');
var sym3 = Symbol('foo');
typeof sym1 // "symbol"
sym1 // Symbol()
sym2 // Symbol('foo')
sym3 // Symbol('foo')
sym1.toString() // "Symbol()"
sym2.toString() // "Symbol(foo)"
sym3.toString() // "Symbol(foo)"
sym2 === sym3 // false
var sym = new Symbol(); // TypeError
// Symbol
var sym = Symbol("foo");
typeof sym; // "symbol"
var symObj = Object(sym);
typeof symObj; // "object"
//
`your symbol is ${sym}`
// TypeError: can't convert symbol to string
Boolean(sym) // true
Number(sym) // TypeError
Symbol.for([description])
Symbol.for()とSymbol()の両方の書き方で、新しいSymbolが生成されます.これらの違いは、前者は検索のためにグローバル環境に登録され、後者は検索しません.Symbol.for()は、呼び出すたびに新しいSymbolタイプの値を返すのではなく、指定したkeyがすでに存在するかどうかを確認し、存在しない場合に新しい値を作成します.
Symbol.for("bar") === Symbol.for("bar"); // true
Symbol.for() === Symbol.for(); // true
Symbol("bar") === Symbol("bar"); // false
Symbol.prototype.description
Symbolの説明を取得します.ES 2019は、インスタンス属性を提供する.
const sym = Symbol('foo');
sym.description // "foo"
Symbol.keyFor()
登録されたSymbolタイプ値のkeyを返します.
Symbol.keyFor(); // TypeError
const sym1 = Symbol('a');
Symbol.keyFor(sym1); // undefined
const sym2 = Symbol.for("b");
Symbol.keyFor(sym2); // "b"
Object.getOwnPropertySymbols()
指定したオブジェクトのすべてのSymbol属性名を取得します.Symbolは属性名として機能するため、この属性は
for...in
・for...of
ループには現れず、Object.keys()
・Object.getOwnPropertyNames()
・JSON.stringify()
には戻されない.const obj = {};
let a = Symbol('a');
let b = Symbol('b');
obj[a] = 'Hello';
obj[b] = 'World';
for (let i in obj) {
console.log(i); //
}
Object.getOwnPropertyNames(obj); // []
Object.getOwnPropertySymbols(obj); // [Symbol(a), Symbol(b)]
Reflect.ownKeys()
通常のキー名とSymbolキー名を含むすべてのタイプのキー名を返します.
const obj = {
[Symbol('a')]: 1,
name: 'Ashin',
age: 3
};
Reflect.ownKeys(obj); // ["name", "age", Symbol(a)]
内蔵Symbol値
...
リファレンス
『JavaScriptプレミアムプログラミング』(第3版)ECMAScript 6入門-チェン一峰