Rumah  >  Artikel  >  hujung hadapan web  >  Apakah fungsi simbol dalam es6

Apakah fungsi simbol dalam es6

WBOY
WBOYasal
2022-04-08 10:39:423850semak imbas

Peranan simbol dalam es6: 1. Digunakan sebagai nama atribut mewakili nilai unik, yang boleh memastikan atribut tidak mempunyai nama pendua dan juga boleh diakses di luar kelas 2. Digunakan untuk tentukan pemalar, iaitu jenis data primitif baharu dengan sintaks "const name=Symbol("value")".

Apakah fungsi simbol dalam es6

Persekitaran pengendalian tutorial ini: sistem Windows 10, ECMAScript versi 6.0, komputer Dell G3.

Apakah peranan simbol dalam es6

ES6 memperkenalkan Simbol jenis data primitif baharu, yang mewakili nilai unik Penggunaan terbesar adalah untuk mentakrifkan nama atribut unik sesuatu objek.

Selain Nombor, Rentetan, Boolean, Objek, null dan undefined, jenis data ES6 juga menambah Simbol.

Penggunaan asas

Timbunan fungsi simbol tidak boleh menggunakan arahan baharu kerana Simbol ialah jenis data primitif, bukan objek. Anda boleh menerima rentetan sebagai parameter untuk memberikan penerangan bagi Simbol yang baru dibuat, yang boleh dipaparkan pada konsol atau digunakan sebagai rentetan untuk pembezaan yang mudah.

let sy = Symbol("KK");
console.log(sy);   // Symbol(KK)
typeof(sy);        // "symbol"
 
// 相同参数 Symbol() 返回的值不相等
let sy1 = Symbol("kk"); 
sy === sy1;       // false

Sebagai nama atribut

Penggunaan

Memandangkan nilai setiap Simbol tidak sama, jadi Simbol digunakan sebagai nama atribut objek untuk memastikan bahawa atribut tidak mempunyai nama pendua.

Apakah fungsi simbol dalam es6

Simbol tidak boleh digunakan sebagai nama sifat objek Pengendali . Oleh kerana pengendali . diikuti oleh rentetan, atribut rentetan sy diperoleh, bukan atribut nilai Symbol.

let syObject = {};
syObject[sy] = "kk";
 
syObject[sy];  // "kk"
syObject.sy;   // undefined

Nota

Apabila nilai Simbol digunakan sebagai nama atribut, atribut ialah atribut awam, bukan atribut peribadi dan boleh diakses di luar kelas. Tetapi ia tidak akan muncul dalam gelung for...in dan for...of, dan ia juga tidak akan dikembalikan oleh Object.keys() dan Object.getOwnPropertyNames(). Jika anda ingin membaca sifat Simbol sesuatu objek, anda boleh mendapatkannya melalui Object.getOwnPropertySymbols() dan Reflect.ownKeys().

let syObject = {};
syObject[sy] = "kk";
console.log(syObject);
 
for (let i in syObject) {
  console.log(i);
}    // 无输出
 
Object.keys(syObject);                     // []
Object.getOwnPropertySymbols(syObject);    // [Symbol(key1)]
Reflect.ownKeys(syObject);                 // [Symbol(key1)]

Tentukan pemalar

Gunakan rentetan untuk mewakili pemalar dalam ES5. Contohnya:

const COLOR_RED = "red";
const COLOR_YELLOW = "yellow";
const COLOR_BLUE = "blue";

Tetapi menggunakan rentetan tidak dapat menjamin bahawa pemalar adalah unik, yang akan menyebabkan beberapa masalah:

Tetapi gunakan Simbol untuk menentukan pemalar, supaya nilai ini set pemalar boleh dijamin Semuanya tidak sama. Ubah suai contoh di atas menggunakan Simbol.

const COLOR_RED = Symbol("red");
const COLOR_YELLOW = Symbol("yellow");
const COLOR_BLUE = Symbol("blue");
 
function ColorException(message) {
   this.message = message;
   this.name = "ColorException";
}
function getConstantName(color) {
    switch (color) {
        case COLOR_RED :
            return "COLOR_RED";
        case COLOR_YELLOW :
            return "COLOR_YELLOW ";
        case COLOR_BLUE:
            return "COLOR_BLUE";
        default:
            throw new ColorException("Can't find this color");
    }
}
 
try {
   
   var color = "green"; // green 引发异常
   var colorName = getConstantName(color);
} catch (e) {
   var colorName = "unknown";
   console.log(e.message, e.name); // 传递异常对象到错误处理
}

Nilai Simbol adalah unik, jadi tidak akan ada pemalar dengan nilai yang sama, yang memastikan suis dilaksanakan seperti yang diharapkan oleh kod.

[Cadangan berkaitan: tutorial video javascript, bahagian hadapan web]

Atas ialah kandungan terperinci Apakah fungsi simbol dalam es6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn