摘要:值通過函數生成,使用,結果為函數前不能使用命令,否則會報錯。函數的參數只是表示對當前值的描述,相同參數的函數的返回值是不相等的。值可以作為標識符,用于對象的屬性名,可以保證不會出現同名的屬性。方法返回一個已登記的類型值的。
ES6 引入了一種新的原始數據類型 Symbol,表示獨一無二的值。 1. Symbol 值通過 Symbol 函數生成,使用 typeof,結果為 "symbol"
var s = Symbol(); console.log(typeof s); // "symbol"2. Symbol 函數前不能使用 new 命令,否則會報錯。這是因為生成的 Symbol 是一個原始類型的值,不是對象。 3. instanceof 的結果為 false
var s = Symbol("foo"); console.log(s instanceof Symbol); // false4. Symbol 函數可以接受一個字符串作為參數,表示對 Symbol 實例的描述,主要是為了在控制臺顯示,或者轉為字符串時,比較容易區分。
var s1 = Symbol("foo"); console.log(s1); // Symbol(foo)5. 如果 Symbol 的參數是一個對象,就會調用該對象的 toString 方法,將其轉為字符串,然后才生成一個 Symbol 值。
const obj = { toString() { return "abc"; } }; const sym = Symbol(obj); console.log(sym); // Symbol(abc)6. Symbol 函數的參數只是表示對當前 Symbol 值的描述,相同參數的 Symbol 函數的返回值是不相等的。
// 沒有參數的情況 var s1 = Symbol(); var s2 = Symbol(); console.log(s1 === s2); // false // 有參數的情況 var s1 = Symbol("foo"); var s2 = Symbol("foo"); console.log(s1 === s2); // false7. Symbol 值不能與其他類型的值進行運算,會報錯。
var sym = Symbol("My symbol"); console.log("your symbol is " + sym); // TypeError: can"t convert symbol to string8. Symbol 值可以顯式轉為字符串。
var sym = Symbol("My symbol"); console.log(String(sym)); // "Symbol(My symbol)" console.log(sym.toString()); // "Symbol(My symbol)"9. Symbol 值可以作為標識符,用于對象的屬性名,可以保證不會出現同名的屬性。
var mySymbol = Symbol(); // 第一種寫法 var a = {}; a[mySymbol] = "Hello!"; // 第二種寫法 var a = { [mySymbol]: "Hello!" }; // 第三種寫法 var a = {}; Object.defineProperty(a, mySymbol, { value: "Hello!" }); // 以上寫法都得到同樣結果 console.log(a[mySymbol]); // "Hello!"10. Symbol 作為屬性名,該屬性不會出現在 for...in、for...of 循環中,也不會被 Object.keys()、Object.getOwnPropertyNames()、JSON.stringify() 返回。但是,它也不是私有屬性,有一個 Object.getOwnPropertySymbols 方法,可以獲取指定對象的所有 Symbol 屬性名。
var obj = {}; var a = Symbol("a"); var b = Symbol("b"); obj[a] = "Hello"; obj[b] = "World"; var objectSymbols = Object.getOwnPropertySymbols(obj); console.log(objectSymbols); // [Symbol(a), Symbol(b)]11. 如果我們希望使用同一個 Symbol 值,可以使用 Symbol.for。它接受一個字符串作為參數,然后搜索有沒有以該參數作為名稱的 Symbol 值。如果有,就返回這個 Symbol 值,否則就新建并返回一個以該字符串為名稱的 Symbol 值。
var s1 = Symbol.for("foo"); var s2 = Symbol.for("foo"); console.log(s1 === s2); // true12. Symbol.keyFor 方法返回一個已登記的 Symbol 類型值的 key。
var s1 = Symbol.for("foo"); console.log(Symbol.keyFor(s1)); // "foo" var s2 = Symbol("foo"); console.log(Symbol.keyFor(s2) ); // undefined
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95527.html
摘要:值可以作為標識符,用于對象的屬性名,可以保證不會出現同名的屬性。的結果為因為不是通過的方式實現的,所以的結果自然是。這個實現類似于函數記憶,我們建立一個對象,用來儲存已經創建的值即可。方法返回一個已登記的類型值的。 前言 實際上,Symbol 的很多特性都無法模擬實現……所以先讓我們回顧下有哪些特性,然后挑點能實現的……當然在看的過程中,你也可以思考這個特性是否能實現,如果可以實現,該...
摘要:通常,它做為一個偏功能性的標記來表示,在全劇中它是唯一的。并且使用來生成,會在存入當前全局上下文中一個結構中,我們稱它為顧名思義,它是全局的,所以使用時我們需要謹慎,尤其是在大型項目中。 ES6中基礎類型增加到了7種,比上一個版本多了一個Symbol,貌似出現了很長時間,但卻因沒有使用場景,一直當作一個概念層來理解它,我想,用它的最好的方式,還是要主動的去深入了解它吧,所以我從基礎部分...
閱讀 768·2023-04-25 17:33
閱讀 3626·2021-07-29 14:49
閱讀 2481·2019-08-30 15:53
閱讀 3435·2019-08-29 16:27
閱讀 2000·2019-08-29 16:11
閱讀 1030·2019-08-29 14:17
閱讀 2432·2019-08-29 13:47
閱讀 2016·2019-08-29 13:28