ホームページ > ウェブフロントエンド > フロントエンドQ&A > es6 でのシンボルの使用法は何ですか

es6 でのシンボルの使用法は何ですか

WBOY
リリース: 2022-04-25 18:27:11
オリジナル
1942 人が閲覧しました

es6 では、Symbol を属性名、定義された変数、または一意の値を表す定数として使用できます。これは es6 の新しいデータ型です。Symbol を通じて宣言された 2 つの変数が等しくなることはありません。構文は次のとおりです。 : "const name=Symbol("value")"。

es6 でのシンボルの使用法は何ですか

このチュートリアルの動作環境: Windows 10 システム、ECMAScript バージョン 6.0、Dell G3 コンピューター。

es6 でのシンボルの使用法とは何ですか

シンボルとは何ですか?

シンボルは、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 サイトの他の関連記事を参照してください。

関連ラベル:
es6
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート