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