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