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的描述,用来区分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]()
console.log(Symbol("nodeing") === Symbol("nodeing")) //false
let s1 = new Symbol(); //报错
let s1 = Symbol("s1"); console.log(String(s1)); //Symbol(s1) console.log(Boolean(s1)); //true console.log(Number(s1)) //报错
console.log(Symbol("s1") + "nodeing") //报错 console.log(Symbol("s1") - 100) //报错
let obj = { //设置属性 [Symbol("name")]: 'xiaoqiang' }; //取值 console.log(obj[Symbol("name")]);
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 }
console.log(Object.getOwnPropertySymbols(obj))
JavaScript ビデオ チュートリアル
、Web フロント エンド ]
以上がes6 でのシンボルの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。