ES6新特性之Symbol類型用法分析

本文實(shí)例講述了ES6新特性之Symbol類型用法。分享給大家供大家參考,具體如下:

10年積累的網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有德城免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

Symbol類型

1. 為了避免屬性名的沖突,ES6新增了Symbol類型。Symbol可以產(chǎn)生一個(gè)獨(dú)一無(wú)二的值。

let s1 = Symbol('a');
let s2 = Symbol('a');
console.log(s1); //Symbol(a)
console.log(typeof s1); //symbol
console.log(s1 == s2); //false

2.Symbol用于屬性名。

var s1 = Symbol();
var s2 = Symbol();
var s3 = Symbol();
var obj = {
  [s1]: 'hi'
};
obj[s2] = 'ES6';
Object.defineProperty(obj, s3, {
  value: 'ES2015'
});
console.log(obj); //Object {Symbol(): "hi", Symbol(): "ES6", Symbol(): "ES2015"}
console.log(obj.s1); //undefined -> 所以當(dāng)用Symbol作為屬性名時(shí)候,不能用.運(yùn)算符訪問屬性
console.log(obj[s1]); //hi
console.log(obj['s1']); //undefined

注意:Symbol作為屬性名,該屬性不會(huì)出現(xiàn)在 for...in...和 for...of... 循環(huán)中,也不會(huì)被 Object.keys(), Object.getOwnPropertyNames() 返回。Object.getOwnProertySymbols()返回一個(gè)數(shù)組,成員是當(dāng)前對(duì)象的所有用作屬性名的symbol值。

2. Symbol.for() 接受一個(gè)字符串作為參數(shù),然后搜索有沒有以該參數(shù)作為名稱的Symbol值,有就返回這個(gè)Symbol值,否則就新建并返回一個(gè)以該字符串為名稱的Symbol值。

3. Symbol.keyFor()方法返回一個(gè)已經(jīng)登記的Symbol類型值的key。

Symbol()方法生成一個(gè)Symbol類型時(shí),沒有登記,所以每次調(diào)用Symbol(哪怕傳入相同的字符串)會(huì)返回不同的Symbol,但是Symbol.for()在生成Symbol時(shí)候進(jìn)行了登記,每次再次調(diào)用時(shí),都會(huì)先尋找是否有傳入相同參數(shù)的Symbol,故只有Symbol.for()產(chǎn)生的Symbol才能被Symbol.keyFor()找到。

let s1 = Symbol('a');
let s2 = Symbol('a');
let s3 = Symbol.for('b');
let s4 = Symbol.for('b');
let name1 = Symbol.keyFor(s1);
let name3 = Symbol.keyFor(s3);
console.log(s1 == s2); //false
console.log(s1 == s3); //false
console.log(s2 == s3); //false
console.log(s3 == s4); //true
console.log(name1); //undefined
console.log(name3); //b

希望本文所述對(duì)大家ECMAScript程序設(shè)計(jì)有所幫助。

標(biāo)題名稱:ES6新特性之Symbol類型用法分析
URL地址:http://muchs.cn/article16/jsoidg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、品牌網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)企業(yè)建站、虛擬主機(jī)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站