ホームページ >ウェブフロントエンド >フロントエンドQ&A >es6 でのシンボルの使用法は何ですか
es6 では、Symbol を属性名、定義された変数、または一意の値を表す定数として使用できます。これは es6 の新しいデータ型です。Symbol を通じて宣言された 2 つの変数が等しくなることはありません。構文は次のとおりです。 : "const name=Symbol("value")"。
このチュートリアルの動作環境: Windows 10 システム、ECMAScript バージョン 6.0、Dell G3 コンピューター。
シンボルとは何ですか?
シンボルは、es6 で新しく追加されたデータ型で、一意性の値を表します。 。 es5 では、データ型を基本データ型 (文字列、数値、ブール値、未定義、null) と参照データ型 (オブジェクト) に分割します。es6 の新しいシンボル データ型は、基本データ型に分割されています
Whyそのようなデータ型はありますか?
//别人给了你一个定义好的对象 var obj = { name: "xiaoqiang", showName: function(){alert(1)} } //你拿到对象想给这对象添加新的属性和方法的时候,可能会创建出一个name属性和showName方法 obj.name = "nodeing" obj.showName = function(){alert(2)} //这个时候,新增加的方法和属性就会去把原有的方法覆盖,这样就产生了冲突
オブジェクトのプロパティとメソッドは文字列で構成されているため、新しいメソッドとプロパティを追加すると競合が発生する可能性があります。es6 では、一意の値を表すために新しいデータ型が追加されます
#A Symbol 関数を使用して一意の値を作成できます。Symbol 関数が実行されるたびに、オブジェクトが返されます。let s1 = Symbol() let s2 = Symbol() console.log(s1 === s2) //false 说明创建出来的s1和s2 并不是相同的 console.log(s1, s2); //Symbol() Symbol()上記のコードでは、出力される値はすべて Symbol() です。誰ですか? s1 です、s2 は誰ですか?この問題は、パラメーターを渡すことで解決できます。
//传入的参数就是对当前Symbol的描述,用来区分Symbol let s1 = Symbol("s1") let s2 = Symbol("s2") console.log(s1, s2); //Symbol(s1) Symbol(s2)アプリケーション シナリオシンボルは、通常、オブジェクトの
プロパティ名 または メソッド を設定するために使用されます。新しいのを防ぐ追加された属性またはメソッドが元の属性またはメソッドと競合します
let name = Symbol("name"); let show = Symbol("show"); let obj = { //设置属性 [name]: 'xiaoqiang', [show](){alert(1)} }; //取值 console.log(obj[name]); //调用方法 obj[show]()ここで、name の値は [] で変更できる変数である必要があることに注意してください。Notes 注 1: Symbol 内のパラメータは Symbol の説明のみであり、それ以外の意味はありません。したがって、記述が同じであっても、Symbol は異なります。 Symbol 関数の戻り値はオブジェクトです
console.log(Symbol("nodeing") === Symbol("nodeing")) //false注 2: New キーワードを使用して Symbol 関数を呼び出すことはできません
let s1 = new Symbol(); //报错注 3: Symbol 関数の型を数値に変換することはできません型変換
let s1 = Symbol("s1"); console.log(String(s1)); //Symbol(s1) console.log(Boolean(s1)); //true console.log(Number(s1)) //报错注 4: Symbol は何も操作できません (戻り値の操作ができない可能性があります)
console.log(Symbol("s1") + "nodeing") //报错 console.log(Symbol("s1") - 100) //报错注 5: Symbol がオブジェクトのプロパティまたはメソッドとして使用される場合、値が変数に割り当てられていない場合に値を取得する方法
let obj = { //设置属性 [Symbol("name")]: 'xiaoqiang' }; //取值 console.log(obj[Symbol("name")]);注 6: ループ内でシンボルを for で走査することはできません
let name = Symbol('name') let age = Symbol('age') let obj = { a: 1, b: 2, [name]: 'xiaoqiang', [age]: 18 }; for(let attr in obj){ console.log(attr,obj[attr]) //a b }Object.getOwnPropertySymbols を使用して、すべてのシンボル プロパティを表示できます。オブジェクト
console.log(Object.getOwnPropertySymbols(obj))[関連する推奨事項:
JavaScript ビデオ チュートリアル
、Web フロント エンド ]
以上がes6 でのシンボルの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。