ES6 Symbol 数据类型
ES6-Symbol 類型
ES5 除類數(shù)組對象(類數(shù)組對象名可以為數(shù)字,對象必須有 length 屬性,可以用數(shù)組下標(biāo)的方式訪問對象屬性,但不能通過點(diǎn)的方式訪問)外,對象屬性名都是字符串,這很容易造成屬性名的沖突。而且 JavaScript 是弱類型語言,屬性名沖突不會報(bào)錯(cuò),處于代碼執(zhí)行順序后面的屬性值會覆蓋前面的屬性值(屬性值容易被篡改),這樣對象的屬性就不能保證是我們想要的。
ES6 引入了Symbol數(shù)據(jù)類型很好地解決了對象屬性名沖突的問題。
Symbol表示 獨(dú)一無二的值 ,它是原始數(shù)據(jù)類型,不能用 new
ES6之后JavaScript就有了7種數(shù)據(jù)類型,分別是:Number 、String 、Boolean 、null 、undefined 、Object 、Symbol
基本用法
Symbol 函數(shù)棧不能用 new 命令,因?yàn)?Symbol 是原始數(shù)據(jù)類型,不是對象。可以接受一個(gè)字符串作為參數(shù),為新創(chuàng)建的 Symbol 提供描述,用來顯示控制臺或者作為字符串的時(shí)候使用,便于區(qū)分。
let name = Symbol('name'); console.log(name); // Symbol(name); console.log(typeof name); // "symbol"特點(diǎn)
Symbol 函數(shù)棧不能用 new 命令,因?yàn)?Symbol 是原始數(shù)據(jù)類型,不是對象;
Symbol 表示獨(dú)一無二的值,因此帶有相同參數(shù)的兩個(gè) Symbol 值也不相等;
Symbol 應(yīng)用場景
用 Symbol 聲明的對象名不能用 key.value 的形式獲取對象的屬性值,要用 [ ],原因:
1. ES5中對象 .(點(diǎn)) 運(yùn)算符獲取的屬性名是字符串, 用 key.value 的形式會將屬性名識別為字符串,新建一個(gè)屬性名給對象,無法和 Symbol 屬性區(qū)別
2. 方括號中帶雙引號的屬性名表示字符串屬性,不帶雙引號的屬性名表示 Symbol 屬性,一次區(qū)別二者
Symbol的方法
作用:用于將描述相同的 Symbol 變量指向同一個(gè) Symbol 值
let a1 = Symbol.for('a');let a2 = Symbol.for('a');a1 === a2 // truetypeof a1 // "symbol"typeof a2 // "symbol"let a3 = Symbol('a');a1 === a3 // false- Symbol() 和 Symbol.for() 的相同點(diǎn):
- 它們定義的值類型都為 “Symbol”;
- Symbol() 和 Symbol.for() 的不同點(diǎn):
- Symbol() 定義的值每次都是新建,即使描述相同值也不相等;
- Symbol() 定義的值會先檢查給定的描述是否已經(jīng)存在,如果不存在才會新建一個(gè)值,并把這個(gè)值登記在全局環(huán)境中供搜索,Symbol.for() 定義相同描述的值時(shí)會被搜索到,描述相同則他們就是一個(gè)值。
作用:用來檢測該字符串參數(shù)作為名稱的 Symbol 值是否已被登記,返回一個(gè)已登記的 Symbol 類型值的 key
let a1 = Symbol.for('a'); Symbol.keyFor(a1); // "a" let a2 = Symbol('a'); Symbol.keyFor(a2); // undefined// a1已經(jīng)用Symbol.for()登記過,因此返回的key為"a",而a2沒有被登記,因此返回undefinedSymbol的屬性
description用于返回 Symbol 數(shù)據(jù)的描述
// Symbol() 定義的數(shù)據(jù) let a = Symbol('acc'); console.log(a.description); // "acc" Symbol.keyFor(a); // undefined// Symbol.for() 定義的數(shù)據(jù) let a1 = Symbol.for('acc'); console.log(a1.description); // "acc" Symbol.keyFor(a1); // "acc"// 未指定描述的數(shù)據(jù) let a2 = Symbol.(); console.log(a1.description); // undefineddescription屬性和Symbol.keyFor()方法的區(qū)別是:description 能返回所有 Symbol 數(shù)據(jù)類型的描述,而 Symbol.keyFor() 只能返回 Symbol.for() 在全局注冊過的描述。
總結(jié)
以上是生活随笔為你收集整理的ES6 Symbol 数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何突破JAVA程序员的分水岭
- 下一篇: python乘法表运算_Python入门