ES6 11學習筆記 Symbol

2022-09-08 17:18:13 字數 2323 閱讀 8562

symbol:一種新的原始資料型別

宣告方式:

let s1 = symbol()

let s2 = symbol()

console.log(s1); // symbol()

console.log(s2); // symbol()

console.log(s1 === s2); // false

let s3 = symbol('foo');

let s4 = symbol('bar');

console.log(s3); // symbol(foo)

console.log(s4); // symbol(bar)

console.log(s3 === s4); // false

如果symbol宣告時傳入的引數是物件,會自動呼叫自身的tostring方法:

const obj = 

let s5 = symbol(obj)

console.log(s5); // symbol([object object])

for方法:

使用for方法會在全域性進行表述的定義,下次再使用for定義,會先去全域性定義裡面找有沒有定義過的描述

let s6 = symbol.for('foo')

let s7 = symbol.for('foo')

function foo()

s8 = foo()

console.log(s6 === s7); // true

console.log(s6 === s8); // true

keyfor來檢視你的symbol有沒在全域性登記過:

const s9 = symbol('foo')

const s10 = symbol.for('foo')

console.log(symbol.keyfor(s9)); // undefined

console.log(symbol.keyfor(s10)); // foo

應用場景:

1、用symbol保證物件的key可以重名但是key不相等,得到同時存在,

例如乙個物件裡面儲存班級同學的資訊,但是很有可能班級有重名的情況

const stu1 = symbol('張三')

const stu2 = symbol('張三')

const grade = ,

[stu2]: ,

}console.log(grade);

console.log(grade[stu1]);

console.log(grade[stu2]);

2、使用symbol可以相對隱藏類的例項屬性

const sym = symbol('age')

class user

getname()

}const user = new user('張三')

user.getname()

// for in是讀取不到sym屬性

for (let key in user)

// keys讀取不到sym屬性

for (let key of object.keys(user))

// getownpropertysymbols只能讀取symbol屬性

for (let key of object.getownpropertysymbols(user))

// reflect.ownkeys既可以讀取一般例項屬性,也可以讀取symbol屬性

for (let key of reflect.ownkeys(user))

3、消除魔術字串

什麼是魔術字串?如下**:

這裡的aaa,bbb就是魔術字串,需要來回編寫,而且只要原方法修改,另外地方也要跟著修改

function getarea(str) 

return area

}console.log(getarea('aaa'))

使用物件來消除魔術字串

/* 

const strtype =

*/// 由於上面value其實並不需要關心是什麼字串,所以可以用symbol來代替

const strtype =

function getarea2(str)

return area

}console.log(getarea2(strtype.aaa))

ES6 11學習筆記 箭頭函式

1 this指向定義時所在的物件,而不是呼叫時所在的物件 2 不可以當做建構函式 3 不可以使用arguments物件 es5中定義函式的兩種方式 function fn1 let fn2 function fn1和fn2之間區別是 fn1編譯器會預編譯,呼叫fn1無論是在定義的前面還是後面都能正常...

es6 學習筆記(二)Symbol

symbol類似於enum,可以起到識別符號的作用。主要可以應用在一下場景。1.可以作為屬性名 var mysymbol symbol var a a.mysymbol hello a mysymbol undefined a mysymbol hello 要注意symbol值作為物件屬性名時,不能...

6 11學習筆記

一.加強版ol元素 1.可以通過start屬性來定義標號的開始值。2.可以通過reversed屬性來進行反向編號。二.dl元素 dl元素在html4中 d元素在html4中,是乙個專門用來定義術語的列表。dl元素在html5中 d元素在html5中,把d元素進行了重定義。每一項包含一條或者多秦帶名字...